Capture the Android's browser HTTP petitions

by psaltamontes » Fri, 19 Jun 2009 02:43:42 GMT

Sponsored Links

I need capture the Android's browser HTTP petitions.

The idea is to use a service that listen a localport (7777). This
service modify the HTTP petition and sends this petition to Internet.

In PC to capture the HTTP petitions is easy, I change the browser
configuration, I put localhost and a port (7777) and it's works. But,
in Android I don't know how to change the browser configuration.

I think that in "/data/data/" there are the
configuration files of the browser, but I don't know if I can
configure the proxy browser.

Any idea?


Capture the Android's browser HTTP petitions

by psaltamontes » Fri, 19 Jun 2009 22:58:08 GMT

 Yes, I want to say request :), sorry , I need improve my English.

I don't want my application modify the settings of the browser, the
idea is that the user configure the proxy of the browser and install
my application. This application is a service that listen the HTTP
requests and send to the Internet.

I want capture the HTTP request and modify the headers because, in the
header, I put a number to identify the client that connect to my
webserver, doing this, the user don't have to put an user name and a
password. I have written the code to do this, in PC works, but in
Android I don't know how to get this behaviour.

How can I do?


Sponsored Links

Capture the Android's browser HTTP petitions

by psaltamontes » Fri, 19 Jun 2009 23:34:52 GMT

 Do you know/think if this option will be in the future?

Now, I'm trying to do something with a webview and webviewclient. But
I don't know how to send a "RAW HTTP request" using these classes.

I can send/receive RAW HTTP with sockets, but I don't know how to link
these sockets with the webview.

Any idea?



Capture the Android's browser HTTP petitions

by psaltamontes » Sat, 20 Jun 2009 00:44:30 GMT


Capture the Android's browser HTTP petitions

by Alexey Krasnoriadtsev » Sun, 21 Jun 2009 00:40:00 GMT

 You can create your own Browser application, that will allow proxy
configuration. You can also take original Browser app as the base
(it's available in git).

Those users who need proxy will be able to install your browser
application and use it.


Capture the Android's browser HTTP petitions

by Hamy » Sun, 21 Jun 2009 02:18:54 GMT

 Sorry, realized right after I sent that that the imports might be


import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.DefaultHttpClient;


Capture the Android's browser HTTP petitions

by Hamy » Sun, 21 Jun 2009 02:28:34 GMT

 ot sure if this will help, but I hope so. This is code I found in an
application my research group is working on, and it is under apache v2


final HttpClient c = new DefaultHttpClient();
final HttpPost post = new HttpPost(SERVER + PATH);

StringBuffer params = new StringBuffer();

// Create the parameter string
params.append("type=accident&user="+androidid+"&time="+ timeStr
+ lat + "&lon="+lon);

// Add the parameters
parameter string: "
+ params);

// Do it
Log.i(LOG_LABEL, LOG_MSG_PREFIX + "Executing post to " + SERVER
Log.d(LOG_LABEL, LOG_MSG_PREFIX + "Spawning thread for HTTP
new Thread(new Runnable() {

public void run() {
HttpResponse resp = null;
try {
resp = c.execute(post);
ByteArrayOutputStream bao = new
"Response from server: "
+ new
} catch (ClientProtocolException e) {
"ClientProtocolException executing post: "
+ e.getMessage());
} catch (IOException e) {
+ "IOException writing
to ByteArrayOutputStream: "
+ e.getMessage());
} catch (Exception e) {
+ "Other Exception of
type:" + e.getClass());
message is: "
+ e.getMessage());

if (resp != null &&
resp.getStatusLine().getStatusCode() == 200) {;


Capture the Android's browser HTTP petitions

by psaltamontes » Mon, 22 Jun 2009 04:02:35 GMT

 @Alexey :

What's the meaning of "git"?

@ Hamy :

 I needed this line :) ! -> resp.getEntity().writeTo(bao);

I'm sure that the code that you are put help me a lot.

@ Raphael :

I used Google before put my question here.

If you search this --> +proxy+for+android+web+browser

The information that Google found is about change the "general/main"
proxy, I only want redirect the browser's traffic.

Thank you people.


Capture the Android's browser HTTP petitions

by Alexey Krasnoriadtsev » Tue, 23 Jun 2009 01:17:29 GMT

 GIT is the repository where all android code is.
for Browser, here is the specific link: ;a=summary


Capture the Android's browser HTTP petitions

by psaltamontes » Tue, 23 Jun 2009 03:49:55 GMT

 hen I think that I'm near to do that I want, there is something that
not works :(.

I have achieved send my modified HTTP request! Well, it works, but
only the first time :).

I have used the WebView, DefaultHttpClient, HttpGet and HttpResponse
classes to do it.

WebView : to see the webpages.
DefaultHttpClient : to send the request.
HttpGet : to do the request and add my header (.addHeader())
HttpResponse : to store the response.

When I have the web server response I send to the WebView, I use

WebView.loadDataWithBaseURL : to load the response, and here is my
problem. If the page has images, for example, the method sends HTTP
GET request. This is OK, but the problem is that the petitions don't
have my header and the server don't accept.

Is possible to modify the petitions that loadDataWithBaseURL does?

@ Alexey :

I have download the browser, this code is complicated for me. I don't
know where to begin. But I will look calmly.

On 22 jun, 19:17, Alexey Krasnoriadtsev <>

Capture the Android's browser HTTP petitions

by psaltamontes » Mon, 29 Jun 2009 23:19:06 GMT

  found the solution to capture the requests, I have to put in the
baseUrl parameter the address of the android proxy.

webview.loadDataWithBaseURL(String baseUrl, String data, String
mimeType, String encoding, String failUrl)

For example, if the android proxy service is listening the port 8282,
the baseUrl parameter will be ( : is the
emulator localhost address). loadDataWithBaseURL sends the requests to
this address and then my proxy can process the request.

On 22 jun, 21:49, psaltamontes <> wrote:

Other Threads

1. Question about service life cycle for GOOGLE engineers

I don't know why you'd specific ask Google engineers to answer this
question. There are plenty of non-Google people who also have some
detailed understanding about the way Android works.

You're seeing situations where the visible activity takes so much
space that the system has to start killing processes that contain

onLowResources() is called when disk resources are getting low, which
isn't the case here. Since the kill is done directly by the kernel
(and happens synchronously within the kernel), there is no opportunity
to call onDestroy() on your code.

I'm not 100% sure about auto-restarting the service, but not
auto-restarting it gives it the opportunity to decide whether to
restart itself or not based on the conditions (e..g network



2. Question about service life cycle for GOOGLE engineers

My application has a remote service always running in the background
and Android apparently kills and re-creates it randomly. I know
Android can does this but the behavior I am seeing is odd.

I log out messages when onLowResources and onDestroy are invoked. When
this condition occurs these methods are not called. There is also
nothing in logcat from either my application or the operating system.
I just see my service go from one PID to a new PID.

Android does recreate my service (onCreate is invoked) but does not re-
start it (onStart is not invoked) even though it was started when it
was killed.

I added code in my service to handle this situation but my question is
if this is normal behavior (i.e. not calling onDestroy and not
restarting the service) or an Android bug?


3. How to install APK file on Android handset

4. Android 1.0 - Screen Loc

5. file browser view : does it exist ?

6. Compilation error on Ant

7. MenuBuilder