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 の再試行を制限した処理 を使ってください。

関連記事