首页 文章

com.android.volley.NoConnectionError - 使用Charles Proxy的Android模拟器

提问于
浏览
15

我想代理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 回答

  • 2

    为了帮助解决

    java.io.IOException:Connection上意外的流结束

    问题请回答评论中的问题 .

    至于

    HttpHost httpproxy = new HttpHost(“192.168.0.101”,8888,“http”); httpClient.getParams()的setParameter(ConnRoutePNames.DEFAULT_PROXY,HTTPPROXY) .

    它不会像你那样帮助你 . 事实上,这是应用代理的另一种方式,IMO甚至比'-http-proxy'更好,因为您可以将其应用于任何地方,不仅适用于模拟器,而且仅适用于此应用程序构建 .

    您需要在您使用的Http堆栈中应用代理 . 例如:

    public class ProxyHurlStack extends HurlStack {
    
        @Override
        protected HttpURLConnection createConnection(URL url) throws IOException {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.1.17", 8888));
            HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
            return conn;
        }
    }
    

    然后为你调试构建你可以使用像:

    requestQueue = Volley.newRequestQueue(context, new ProxyHurlStack());
    
  • -1

    唯一的方法是在服务器端安装SSL(安全套接字层)证书,然后不需要设置任何查尔斯代理 .

    每个企业都有两个开发环境,

    • 开发(http):不需要任何SSL证书

    • 生产环境 (https):需要SSL证书

    当 生产环境 环境安装SSL证书时,android模拟器和Volley库会自动检测网络连接,并且您可以按预期使用apis / web服务 .

    这个问题没有其他解决办法 .

相关问题