android - 防止 OkHttp/Retrofit 绕过代理

标签 android retrofit okhttp retrofit2 okhttp3

当 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));
    }

最佳答案

这已在 OkHttp 3.5.0 中修复

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

OkHttp no longer attempts a direct connection if the system’s HTTP proxy fails. This behavior was surprising because OkHttp was disregarding the user’s specified configuration. If you need to customize proxy fallback behavior, implement your own java.net.ProxySelector.

关于android - 防止 OkHttp/Retrofit 绕过代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757076/

相关文章:

java - Spring Boot 多部分文件始终为空

java - 匿名类不是抽象的,也不会覆盖(Android + Retrofit)

android - 如何在 Android 设备上使用 http/2 和 Okhttp?

javascript - 如何强制网页在所有设备中具有相同的比例?

android: 如何在模拟器上播放 YouTube 视频

java - Android:无法使用 null 启动服务:java.lang.NullPointerException

java - 如何将 GET 参数传递给 Retrofit 请求

android - 如何从包含 Android 自动下载图片的 url 中读取图片?

android - 如何在改造中处理分页

java - 根据输入的内容输出不同数组值的组合