Android应用程序无法通过代理连接到仿真器中的本地IP

时间:2012-01-27 18:51:21

标签: android http proxy android-emulator

我需要能够在我的应用程序和与之通信的HTTP服务器之间插入代理。 HTTP服务器正在LAN上的另一台计算机上运行。代理与模拟器在同一台机器上运行。

我使用的是android-10,在Ubuntu和Windows 7上遇到同样的问题。

如果我像这样启动模拟器:

emulator.exe @default

然后应用程序将正常连接。

但是,如果我像这样启动应用程序:

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

从互联网浏览器(到Google)发出的请求将通过代理,但应用程序无法建立连接。

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

应用程序使用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请求进入代理。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果有人来看,这就是我解决这个问题的方法:

我将应用程序设置为直接与代理对话:

10.0.2.2:8080

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

FORWARD  -> 192.168.3.30

不是最漂亮的解决方案,但它适用于测试环境。