Налаштуйте пересилаючий проксі в 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.

Схожі статті