防止OkHttp / Retrofit绕过代理

时间:2016-04-20 23:37:48

标签: android retrofit okhttp retrofit2 okhttp3

当OkHttp尝试代理,并且该路由失败一次后,该请求之后的每个请求都将完全绕过Android系统代理。因此很难使用Charles进行调试。

我目前有以下代码,但它只能用于Debug版本。它运行良好,但它是一个黑客,我们正在寻求为所有用户发布这个。

是否有一些隐藏的OkHttpClient.dontBypassProxy设置我无法找到?或者,下面的代码看起来是一个很好的解决方案吗?

    OkHttpClient.Builder baseClientBuilder = new OkHttpClient.Builder().retryOnConnectionFailure(false).connectionPool(new ConnectionPool(5, 20, TimeUnit.SECONDS));

    //Ask OkHttp what proxies we have setup
    List<Proxy> proxies = ProxySelector.getDefault().select(URI.create("http://www.somesite.com"));

    if (proxies.size() > 0 && proxies.get(0) != Proxy.NO_PROXY) {
        //Force OkHttp to always use this proxy
        baseClientBuilder.proxy(proxies.get(0));
    }

1 个答案:

答案 0 :(得分:0)

此问题已在OkHttp 3.5.0中修复

https://square.github.io/okhttp/changelog_3x/

  

如果系统的HTTP,OkHttp不再尝试直接连接   代理失败。此行为令人惊讶,因为OkHttp是   忽略用户指定的配置。如果你需要   自定义代理后备行为,实现自己的   java.net.ProxySelector。