Einen Retrofit-Proxy über OkHttpClient konfigurieren
Übergib einen konfigurierten OkHttpClient an Retrofit, während die Basis-URL der API weiter auf den Zieldienst zeigt.
Konfiguriere den Forward-Proxy in OkHttp und übergib anschließend denselben Client an 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();
Das Fragment baut die Transportschicht und die Retrofit-Instanz auf. Füge diesem Builder vor build die von der Anwendung benötigten Converter- und Call-Adapter-Factories hinzu und erzeuge danach das Service-Interface aus dieser Instanz.
Lass baseUrl auf den tatsächlichen API-Dienst zeigen. Setzt du dort die Proxy-URL ein, änderst du das HTTP-Ziel; die Proxy-Aushandlung wird damit nicht konfiguriert. Die Basis-URL behält außerdem Retrofits Vorgabe eines abschließenden Schrägstrichs. Ein zulässiger Test einer öffentlichen API ohne Proxy-Authentifizierung kann eine HTTP-Adresse aus der HTTP-Proxy-Liste für das separate Proxy-Objekt nehmen.
Ein expliziter OkHttp-Proxy hat Vorrang vor seinem ProxySelector. Nutze ihn, wenn der Client einen festen Vermittler haben soll. Anwendungen, die zielabhängiges Routing brauchen, sollten diese Richtlinie besser über den unterstützten Selector entwerfen.
Wurde das Service-Interface bereits aus einer anderen Retrofit-Instanz erzeugt, verschiebt der Aufbau dieser neuen Instanz die Anfragen des alten Interfaces nicht. Halte den konfigurierten Client, die Retrofit-Instanz und das Service-Objekt auf demselben Konstruktionsweg.
Für einen authentifizierten Proxy stellt OkHttp den proxyAuthenticator getrennt vom Ziel-Authenticator bereit. Konfiguriere ihn bei Bedarf am OkHttp-Builder und übergib dann den fertigen Client an Retrofit. Für einen Proxy mit Basic-Authentifizierung nutze begrenzte Wiederholungsbehandlung für proxyAuthenticator.