Конфигуриране на прокси за Retrofit чрез OkHttpClient
Подайте конфигуриран OkHttpClient на Retrofit, като запазите базовия URL на API насочен към целевата услуга.
Конфигурирайте предния прокси в 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 добавете към този builder нужните на приложението фабрики за конвертори и адаптери на извиквания, след което създайте интерфейса на услугата от тази инстанция.
Оставете baseUrl насочен към действителната API услуга. Ако сложите там URL на проксито, променяте дестинацията на HTTP; това не конфигурира договаряне с прокси. Базовият URL също запазва изискването на Retrofit за завършваща наклонена черта. Разрешен тест на публичен API без удостоверяване на прокси може да вземе HTTP адрес от списъка с HTTP проксита за отделния обект Proxy.
Явното прокси в OkHttp има предимство пред неговия ProxySelector. Използвайте го, когато клиентът трябва да има фиксиран посредник. Приложенията, които се нуждаят от маршрутизация според дестинацията, е по-добре да проектират тази политика чрез поддържания селектор.
Ако интерфейсът на услугата вече е създаден от друга инстанция на Retrofit, изграждането на новата инстанция не премества заявките на стария интерфейс. Дръжте конфигурирания клиент, инстанцията на Retrofit и обекта на услугата по един и същ път на изграждане.
За прокси с удостоверяване OkHttp предоставя proxyAuthenticator отделно от удостоверяването на дестинацията. Конфигурирайте го в builder-а на OkHttp, когато е нужно, след което подайте готовия клиент на Retrofit. За прокси с Basic удостоверяване използвайте ограничена обработка на повторните опити на proxyAuthenticator.