2012-01-27 44 views
2

我需要能够在我的应用程序和与之通信的HTTP服务器之间插入代理。 HTTP服务器正在LAN上的另一台计算机上运行。代理与模拟器在同一台机器上运行。Android应用程序无法通过代理连接到模拟器中的本地IP

我采用了android-10,如果我启动模拟器这样我遇到在Ubuntu和Windows 7

这些相同的问题:

emulator.exe @default 

则应用程序将正常连接。

但是,如果我开始喜欢这个应用程序:从互联网浏览器(谷歌来)由

emulator.exe @default -http-proxy 127.0.0.1:8008 

请求都将通过代理,但应用程序无法建立连接。

我曾尝试在APN中设置代理设置,以及使用本地计算机的LAN IP地址。

应用程序IS使用HTTP(http://developer.android.com/reference/java/net/HttpURLConnection.html),所以代理应该能够解释请求。

我可以在代理关闭的情况下通过模拟器内的互联网浏览器访问服务器,但不能启用代理服务器。

我跑了以下行模拟器:

emulator.exe @default -http-proxy 127.0.0.1:8008 -debug-proxy 

,发现请求被作为走出去:

http_service_connect: trying to connect to 192.168.3.131:8080 
http_service_connect: using HTTP rewriter 
tcp:192.168.3.131:8080(35): connecting 
tcp:192.168.3.131:8080(35): connected to http proxy, sending header 
tcp:192.168.3.131:8080(35): sending 39 bytes: 
>> 43 4f 4e 4e 45 43 54 20 31 39 32 2e 31 36 38 2e CONNECT 192.168. 
>> 33 2e 31 33 31 3a 38 30 38 30 20 48 54 54 50 2f 3.131:8080 HTTP/ 
>> 31 2e 31 0d 0a 0d 0a        1.1.... 

tcp:192.168.3.131:8080(35): header sent, receiving first answer line 
tcp:192.168.3.131:8080(35): received 'HTTP/1.0 200 Connection established' 
tcp:192.168.3.131:8080(35): receiving second answer line 
tcp:192.168.3.131:8080(35): received '' 
tcp:192.168.3.131:8080(35): connection succeeded 

但是,没有GET或POST请求永远会向代理。

有关如何继续解决此问题的任何建议?

回答

1

万一有人来寻找,这里我是如何解决这个问题:

我设置的应用程序直接交谈的代理:

10.0.2.2:8080 

然后,我配置了代理转发所有的这些请求到服务器:

FORWARD -> 192.168.3.30 

不是最漂亮的解决方案,但它工作正常的测试环境。

+0

行。那么你怎么做到的?你能解释我也有同样的问题 – 2012-04-11 06:24:56

+0

配置你的应用程序,以便直接与代理对话,就好像它是服务器。然后,代理将接收来自应用程序的服务器请求...并且可以将其配置为将这些请求转发给真实服务器(如果您愿意,可以修改请求)。 – Dan 2012-04-11 16:13:14

+0

我的问题是,应用程序是由第三方开发的,我们没有源代码,无法将应用程序内部使用的网址更改为代理服务器,但仍需要测试代理服务器上的网络流量,希望有一些更完整很快回答 – rob 2012-07-06 10:38:03

1

您应该使用10.0.2.2而不是127.0.0.1。 Android认为你的电脑的本地主机是10.0.2.2。

+0

我希望这有助于。如果确实如此,请将其标记为正确。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-01-27 19:10:39

+0

这是正确的,这是将代理放入APN设置时的设置。 当我这样做时,请求从浏览器到代理,但它们绕过应用程序的代理。 – Dan 2012-01-27 19:14:26

+1

你的代理服务器正在监听哪个地址?在最坏的情况下使用HttpParams params = httpclient.getParams(); params.setParameter(ConnRoutePNames.DEFAULT_PROXY,新的HttpHost(代理,端口); httpclient。setParams(PARAMS);希望它可以帮助 – 2012-01-27 19:25:32

相关问题