OkHttp のリクエストには、一般的な可変のプロキシフィールドはありません。呼び出しを作成する前に、意図した経路のクライアントを選びます。

残りの設定を共有したままにすべき場合は、既存のクライアントから経路指定済みのクライアントを派生させます。

OkHttpClient routed = baseClient.newBuilder()
    .proxy(new Proxy(Proxy.Type.HTTP,
        new InetSocketAddress("203.0.113.10", 8080)))
    .build();

エンドポイントはあくまで例です。HTTP プロキシ一覧にある公開 HTTP エンドポイントは、許可された公共サービスの経路のためにこのソケットアドレスを埋めることができますが、それは基本クライアントのポリシーが新しいエンドポイントにプロキシ資格情報を渡さない場合に限られます。OkHttp は、newBuilder がコネクションプールとスレッドのリソースを元のクライアントと共有すると文書化しています。それは、あるプロキシ経由で確立したソケットを別の経路として付け替えられるという意味ではありません。接続の適格性は依然として経路とアドレスの設定に依存します。

繰り返しの作業では、実際に必要なルーティングポリシーをキーとした有限のクライアント集合を保持します。これまでに見たすべての一時アカウントやプロキシの変種をキーに含む無制限のマップは避けてください。

リソースの共有はシャットダウンにも影響します。共有キャッシュを閉じたり、共有ディスパッチャを停止したりすると、それらのリソースを使う他の派生クライアントに影響する可能性があります。派生クライアントをそれぞれ独立したネットワークスタックとして扱うのではなく、リソースの所有権にアプリケーションレベルで明確な寿命を与えてください。

最後に、選択したプロキシの識別情報を呼び出し自体のメタデータに含めます。グローバルな「最後に選んだプロキシ」変数では、同時進行する複数のリクエストの経路を特定できません。

関連記事