Выбор маршрутов прокси в HTTPX через proxy и mounts
Используйте proxy и транспортные mounts в HTTPX с правильной схемой адреса, явной настройкой окружения и отдельными лимитами подключения и чтения.
Используйте proxy=, если один адрес должен обслуживать запросы клиента. Используйте mounts=, если схемам целевых URL нужны разные маршруты. Примеры используют эти интерфейсы HTTPX; проекту со старым API proxies= нужна настройка под его версию.
Один адрес прокси
import httpx
timeout = httpx.Timeout(15.0, connect=5.0)
with httpx.Client(
proxy="http://127.0.0.1:8080",
trust_env=False,
timeout=timeout,
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
Замените локальный слушающий адрес работающим HTTP-прокси. Кандидата из списка HTTP-прокси всё равно нужно проверить с вашим целевым сервером. HTTPS-цель может использовать этот адрес http:// через CONNECT. Смена схемы на https:// запрашивает TLS уже до самого прокси; это должны поддерживать и клиент, и слушающий порт.
Разные маршруты по схеме целевого URL
import httpx
mounts = {
"http://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8080",
trust_env=False,
),
"https://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8081",
trust_env=False,
),
}
with httpx.Client(
mounts=mounts,
trust_env=False,
timeout=httpx.Timeout(15.0, connect=5.0),
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
Ключи mounts сопоставляются с целевыми URL. HTTP-цели здесь выбирают порт 8080, HTTPS-цели — 8081. Значение proxy описывает протокол самого слушающего порта, поэтому mount для HTTPS вполне может содержать прокси http://. Подставьте свои адреса и проверьте обе схемы целей.
Оба варианта задают trust_env=False на клиенте и, где они передаются, на транспортах. Иначе HTTPX по умолчанию читает переменные окружения прокси и сертификатов. Если развёртывание от них зависит, оставьте обнаружение включённым либо явно задайте нужные маршруты и доверие. Для частного доверия используйте TLS-контекст и CA-настройки своей версии HTTPX; проверку цели оставьте включённой. Доверие к HTTPS-прокси может быть отдельно от доверия к цели.
httpx.Timeout(15.0, connect=5.0) переопределяет тайм-аут подключения и задаёт остальным настроенным компонентам значение по умолчанию. Чтение, запись и ожидание пула имеют отдельные лимиты; пятнадцать секунд — не общий лимит фактически прошедшего времени. Тайм-аут пула может означать, что доступные соединения заняты другой работой. Корректно закрывайте клиенты и потоковые ответы, прежде чем считать это признаком недоступности прокси.