OkHttpClient 経由で Retrofit のプロキシを設定する
設定済みの OkHttpClient を Retrofit に渡し、API のベース URL は宛先サービスに向けたままにします。
OkHttp でフォワードプロキシを設定し、その同じクライアントを Retrofit に渡します:
import java.net.InetSocketAddress;
import java.net.Proxy;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
Proxy proxy = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
OkHttpClient http = new OkHttpClient.Builder()
.proxy(proxy)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example/")
.client(http)
.build();
この断片はトランスポート層と Retrofit インスタンスを構築します。build の前に、アプリケーションが必要とするコンバーターとコールアダプターのファクトリーをこのビルダーに追加し、その後このインスタンスからサービスインターフェースを作成します。
baseUrl は実際の API サービスに向けたままにします。そこにプロキシの URL を置くと HTTP の宛先が変わるだけで、プロキシのネゴシエーションは設定されません。ベース URL は Retrofit の末尾スラッシュ要件も保ちます。プロキシ認証なしで許可された公開 API のテストでは、別個の Proxy オブジェクト用に HTTPプロキシ一覧 から HTTP アドレスを取得できます。
明示的な OkHttp プロキシは ProxySelector より優先されます。クライアントに固定の中間経路を持たせたいときに使います。宛先に応じたルーティングが必要なアプリケーションは、対応しているセレクターでその方針を設計するのが適切です。
サービスインターフェースがすでに別の Retrofit インスタンスから作成されている場合、この新しいインスタンスを構築しても古いインターフェースのリクエストは移動しません。設定済みクライアント、Retrofit インスタンス、サービスオブジェクトを同じ構築経路に保ちます。
認証付きプロキシでは、OkHttp は proxyAuthenticator を宛先のオーセンティケーターとは別に公開します。必要に応じて OkHttp ビルダーで設定し、完成したクライアントを Retrofit に渡します。Basic 認証のプロキシには proxyAuthenticator の再試行を制限した処理 を使ってください。