我想代理Android模拟器的网络流量 .
我似乎无法让它发挥作用 .
我的模拟器使用以下方式启动:
emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888
IP和端口指向Charles在“帮助”菜单中报告的内容 .
已安装SSL证书 . 我可以打开模拟器浏览器,Charles向我显示所有流量 . 浏览器照常更新 .
到目前为止一切似乎都很好
现在我尝试运行我的应用程序 . 我的第一个网络电话通过查尔斯成功通过 . 响应返回,Charles显示它 . 但是,响应未成功传递给应用程序 .
我在错误回调中设置了断点,我可以看到由 java.io.IOException: unexpected end of stream on Connection
引起的 com.android.volley.NoConnectionError
.
为什么Charles没有将结果正确地传回给应用程序?
我需要做the end of the configuration page on Charles中定义的内容吗?
HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);
这似乎不正确 - 我错过了什么?
2 回答
为了帮助解决
问题请回答评论中的问题 .
至于
它不会像你那样帮助你 . 事实上,这是应用代理的另一种方式,IMO甚至比'-http-proxy'更好,因为您可以将其应用于任何地方,不仅适用于模拟器,而且仅适用于此应用程序构建 .
您需要在您使用的Http堆栈中应用代理 . 例如:
然后为你调试构建你可以使用像:
唯一的方法是在服务器端安装SSL(安全套接字层)证书,然后不需要设置任何查尔斯代理 .
每个企业都有两个开发环境,
开发(http):不需要任何SSL证书
生产环境 (https):需要SSL证书
当 生产环境 环境安装SSL证书时,android模拟器和Volley库会自动检测网络连接,并且您可以按预期使用apis / web服务 .
这个问题没有其他解决办法 .