var client = clients.GetOrAdd(
    "proxy-east",
    "https://example.com",
    builder => builder.ConfigureInnerHandler(handler =>
        handler.Proxy = new WebProxy("http://203.0.113.10:8080")));

Здесь clients — это IFlurlClientCache из Flurl 4. Выберите маршрут до поиска и дайте его переиспользуемому клиенту стабильное имя. Для разрешённых публичных запросов список HTTP-прокси предлагает кандидатов для URL WebProxy внутреннего handler. Повторное использование proxy-east с новым значением прокси — это не переконфигурация уже сохранённого там клиента для каждого запроса.

Используйте API handler, соответствующий выбранному приложением типу; Flurl документирует другой путь конфигурации для SocketsHttpHandler.

Храните выбранный маршрут в метаданных операции и вызывайте через соответствующий ему клиент. Случайный выбор при каждом обращении к factory иначе может дать одной логической задаче несогласованные политики.

Владейте кэшем в рамках области приложения и ограничивайте его рост. Меняющийся временный список прокси может накапливать клиентов и ресурсы; используйте безопасные идентификаторы маршрутов для имён и логов вместо встроенных паролей.

Здесь используется интерфейс именованного кэша Flurl 4 вместо копирования старой собственной инфраструктуры factory или изменения используемого handler во время другого запроса.

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