Используйте 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) переопределяет тайм-аут подключения и задаёт остальным настроенным компонентам значение по умолчанию. Чтение, запись и ожидание пула имеют отдельные лимиты; пятнадцать секунд — не общий лимит фактически прошедшего времени. Тайм-аут пула может означать, что доступные соединения заняты другой работой. Корректно закрывайте клиенты и потоковые ответы, прежде чем считать это признаком недоступности прокси.

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