Запит OkHttp не має загального змінюваного поля проксі. Виберіть клієнт із потрібним маршрутом перед створенням його виклику.

Коли решта конфігурації має залишатися спільною, отримайте маршрутизований клієнт із наявного клієнта:

OkHttpClient routed = baseClient.newBuilder()
    .proxy(new Proxy(Proxy.Type.HTTP,
        new InetSocketAddress("203.0.113.10", 8080)))
    .build();

Кінцева точка наведена лише для прикладу. Публічні HTTP-точки зі списку HTTP-проксі можуть заповнити цю адресу сокета для дозволеного маршруту публічної служби, за умови що політика базового клієнта не передає нових облікових даних проксі новій кінцевій точці. OkHttp документує, що newBuilder спільно використовує ресурси пулу з'єднань і потоків з оригінальним клієнтом. Це не означає, що сокет, установлений через один проксі, можна перейменувати на інший маршрут. Придатність з'єднання все ще залежить від конфігурації маршруту й адреси.

Для повторюваної роботи тримайте обмежений набір клієнтів, ключованих за справді потрібною вам політикою маршрутизації. Уникайте необмеженої мапи, ключі якої містять усі коли-небудь помічені тимчасові облікові записи чи варіації проксі.

Спільне використання ресурсів впливає й на завершення роботи. Закриття спільного кешу або зупинка спільного диспетчера може вплинути на інші похідні клієнти, що використовують ці ресурси. Надайте володінню ресурсами чіткий час життя на рівні застосунку, замість того щоб вважати кожен похідний клієнт ізольованим мережевим стеком.

Нарешті, включіть ідентичність вибраного проксі у власні метадані виклику. Глобальна змінна «останній вибраний проксі» не дає змоги визначити маршрут кількох одночасних запитів.

Схожі статті