11

OkHttp がプロキシを試行し、そのルートが 1 回失敗すると、その後のすべてのリクエストは Android システム プロキシを完全にバイパスします。そのため、Charles を使用してデバッグするのは困難です。

現在、以下のコードがありますが、デバッグ ビルド専用に設定されています。うまく機能しますが、これはハックです。すべてのユーザー向けにリリースする予定です。

見つからない隠し 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 に答える