Настройте пересылающий прокси в 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 без аутентификации прокси может взять HTTP-адрес из списка HTTP-прокси для отдельного объекта Proxy.

Явный прокси OkHttp имеет приоритет над его ProxySelector. Используйте это, когда клиенту нужен фиксированный посредник. Приложениям, которым требуется маршрутизация в зависимости от адресата, лучше проектировать такую политику через поддерживаемый селектор.

Если интерфейс сервиса уже создан из другого экземпляра Retrofit, построение этого нового экземпляра не переносит запросы старого интерфейса. Держите настроенный клиент, экземпляр Retrofit и объект сервиса на одном пути конструирования.

Для прокси с аутентификацией OkHttp предоставляет proxyAuthenticator отдельно от аутентификатора адресата. Настройте его в конструкторе OkHttp при необходимости, затем передайте готовый клиент в Retrofit. Для прокси с Basic-аутентификацией используйте ограниченную обработку повторов proxyAuthenticator.

Похожие статьи