Tornado предоставляет единый асинхронный интерфейс HTTP-клиента, под которым находятся разные реализации. Поэтому параметры прокси могут не работать из-за выбранной реализации, даже если конечная точка прокси верна.

В документации HTTP-клиента SimpleAsyncHTTPClient указан как реализация по умолчанию и описан альтернативный вариант на основе curl. У параметров запроса, таких как proxy_host, есть примечания о поддержке, зависящие от реализации. Прочитайте эти примечания, прежде чем добавлять параметры в вызов fetch.

Настройте до создания клиента

В окружении, где уже есть backend curl, приложение может выбрать его до создания своего общего клиента:

from tornado.httpclient import AsyncHTTPClient

AsyncHTTPClient.configure('tornado.curl_httpclient.CurlAsyncHTTPClient')
client = AsyncHTTPClient()

Затем используйте документированные параметры запроса для хоста, порта, аутентификации и тайм-аута прокси в нужном вызове. Держите имя хоста отдельно от числового порта. Выбор backend сам по себе не выбирает конечную точку прокси. Для разрешённого публичного HTTP-маршрута список HTTP-прокси предлагает кандидатов хоста и порта для этих параметров запроса.

Создание клиента важно, потому что приложение или фреймворк может создать и сохранить HTTP-клиент до выполнения этого кода. Изучите фактический экземпляр, использованный в неудачном запросе, вместо того чтобы позже создавать другой клиент и предполагать, что он объясняет первый.

Для диагностики запишите активный backend и версию его базовой библиотеки вместе с этапом, на котором произошёл сбой. Отличайте неподдерживаемый параметр запроса от сетевого тайм-аута и от HTTP-ответа, возвращённого прокси. Эти наблюдения ведут к разным исправлениям.

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