Запыт OkHttp не мае агульнага зменлівага поля проксі. Выберыце кліент з патрэбным маршрутам перад стварэннем яго выкліку.

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

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

Канчатковы пункт прыведзены для прыкладу. Публічныя HTTP-пункты з спісу HTTP-проксі могуць запоўніць гэты адрас сокета для дазволенага маршруту публічнай службы, пры ўмове што палітыка базавага кліента не перадае новых уліковых даных проксі новаму пункту. OkHttp дакументуе, што newBuilder агульвае рэсурсы пула злучэнняў і патокаў з зыходным кліентам. Гэта не азначае, што сокет, усталяваны праз адзін проксі, можна перайменаваць у іншы маршрут. Прыдатнасць злучэння па-ранейшаму залежыць ад канфігурацыі маршруту і адраса.

Для паўторнай працы трымайце абмежаваны набор кліентаў з ключамі па палітыцы маршрутызацыі, якая вам сапраўды патрэбная. Пазбягайце неабмежаванай карты, ключы якой змяшчаюць усе калі-небудзь бачаныя часовыя ўліковыя запісы ці варыяцыі проксі.

Агульванне рэсурсаў таксама ўплывае на завяршэнне. Закрыццё агульнага кэша або выключэнне агульнага дыспетчара можа паўплываць на іншыя вытворныя кліенты, якія выкарыстоўваюць гэтыя рэсурсы. Дайце ўладанню рэсурсамі ясны тэрмін жыцця на ўзроўні праграмы, замест таго каб разглядаць кожны вытворны кліент як ізаляваны сеткавы стек.

Нарэшце, уключыце ідэнтычнасць выбранага проксі ў ўласныя метаданыя выкліку. Глабальная зменная “апошні выбраны проксі” не можа вызначыць маршрут некалькіх адначасовых запытаў.

Падобныя артыкулы