Одному сайту нужен другой прокси, чем остальным вашим HTTPS-запросам. Requests может выразить этот выбор прямо в словаре прокси:

routes = {
    "https://reports.example": "http://reports-proxy.example:8080",
    "https": "http://default-proxy.example:8080",
}
response = requests.get(
    "https://reports.example/monthly",
    proxies=routes,
    timeout=(5, 20),
)
response.raise_for_status()

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

Сопоставляйте имя хоста, а не URL ресурса

В Requests 2.32.5 конкретный ключ строится из схемы назначения и разобранного имени хоста. Он не содержит путь, строку запроса или порт.

Добавление /monthly в ключ словаря не ограничит правило этим путём. Точно так же https://reports.example:8443 не является ключом, специфичным для порта, который распознаёт этот селектор. Правило имени хоста действует и тогда, когда URL назначения использует другой порт.

В этом поиске нет раскрытия шаблонов. Правило для reports.example не покрывает поддомен автоматически. Используйте явное решение о маршрутизации вне этого простого словаря, когда политике нужно сопоставление пути, порта или суффикса.

Знайте, какой резервный вариант идёт следующим

Реализация проверяет ключи в таком порядке: scheme://hostname, scheme, all://hostname, затем all. Поэтому запись HTTPS для всей схемы имеет приоритет над записью имени хоста для всех схем. Если это и есть задуманное исключение, поставьте правило имени хоста для конкретной схемы первым в своём дизайне.

Учитывайте и то, как ваш Session объединяет значения по умолчанию и настройки из окружения. Передача этих двух явных записей вместе с запросом делает их задуманные маршруты понятными, но не задаёт политику для любой другой схемы назначения.

Перенаправление может ввести другое имя хоста, и выбор прокси важен и для этого нового назначения. Читайте правило как решение о каждом запрашиваемом URL, а не как постоянный маршрут, привязанный к первой странице.

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