Отправлять через прокси HTTPX только один хост
Подключите прокси-транспорт для выбранного хоста, сохранив обычный резервный маршрут клиента прямым.
Назначьте выбранному хосту прокси-транспорт, а остальной части клиента явно задайте прямой транспорт:
import httpx
direct = httpx.HTTPTransport(trust_env=False)
proxied = httpx.HTTPTransport(
proxy="http://203.0.113.10:8080",
trust_env=False,
)
with httpx.Client(
transport=direct,
mounts={"all://example.com": proxied},
trust_env=False,
timeout=15,
) as client:
response = client.get("https://example.com/")
print(response.status_code)
other = client.get("https://example.org/")
print(other.status_code)
Замените адрес для документации нужной HTTP-точкой своего сервиса или из списка HTTP-прокси. Здесь example.com использует монтирование, а example.org — прямой вариант по умолчанию. Важны оба вызова: успех только на проксируемом хосте не проверяет резервный маршрут.
| Условие сопоставления | Результат |
|---|---|
all://example.com | Точный хост для всех схем назначения. |
| Поддомен | Отдельный выбор; намеренно используйте поддерживаемый шаблон, если он тоже должен совпадать. |
| Путь | Монтирования выбирают шаблоны схемы, хоста и необязательного порта, а не URL-пути. |
| Перенаправление на другой хост | Если следование перенаправлениям включено, сопоставляется новый URL, который может использовать прямой резервный маршрут. |
В примере отключено чтение окружения у клиента и обоих транспортов. Другое широкое правило прокси или совпадающее монтирование может изменить результат при адаптации. Если развёртывание зависит от CA-настроек окружения, задайте это доверие явно или сохраните подходящую политику чтения, чтобы не потерять его незаметно.
Менять прокси для всей машины не нужно. В проверках маршрута сохраняйте и нужный проксируемый хост, и специально выбранный резервный хост.