11

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

我目前有下面的代码,但它设置为仅用于调试版本。它工作得很好,但它是一个 hack,我们希望为所有用户发布它。

是否有一些我找不到的隐藏 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));
    }
4

1 回答 1

1

这已在 OkHttp 3.5.0 中修复

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

如果系统的 HTTP 代理失败,OkHttp 将不再尝试直接连接。这种行为令人惊讶,因为 OkHttp 忽略了用户指定的配置。如果您需要自定义代理回退行为,请实现您自己的 java.net.ProxySelector。

于 2019-12-08T10:25:57.703 回答