防止绕过代理的OkHttp / Retrofit

问题描述 投票:8回答:1

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

我目前有以下代码,但是将其设置为仅用于Debug版本。效果很好,但这是一个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));
    }
android retrofit okhttp retrofit2 okhttp3
1个回答
0
投票

此问题在OkHttp 3.5.0中已修复

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

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

© www.soinside.com 2019 - 2024. All rights reserved.