Прокси Session в Python Requests и приоритет окружения
Сделайте маршрутизацию Python Requests предсказуемой при взаимодействии session.proxies, переменных окружения, параметров запроса и trust_env.
Если session.proxies указывает на один узел, но скрипт использует прокси оболочки, повторное присваивание того же словаря не решит конфликт. Requests может объединять настройки так, что прокси из окружения получают приоритет над значениями Session. Решите, должна ли Session продолжать обнаруживать настройки в окружении.
Сохраните обнаружение окружения, задавайте маршруты в запросе
Передавайте явные значения отдельному вызову, как рекомендует Requests для предотвращения этого конфликта между Session и окружением:
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
with requests.Session() as session:
response = session.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
Замените локальный слушатель своим. Сравнивая общедоступные HTTP-узлы, выбирайте кандидатов из списка HTTP-прокси и не меняйте политику Session. Это управляет переданными записями отображения; для других схем и хостов приложения также сделайте осознанный выбор. Служба, IDE, контейнер или исполнитель CI могут наследовать иное окружение, чем терминал.
Пусть Session управляет своими настройками
Если приложение не должно обнаруживать прокси в окружении, задайте политику до первого запроса:
with requests.Session() as session:
session.trust_env = False
session.proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = session.get(
"https://example.com/",
timeout=(5, 15),
)
response.raise_for_status()
trust_env=False также влияет на связанную с окружением конфигурацию сертификатов и автоматическую аутентификацию netrc. Перед выбором учтите эти зависимости. Для одобренного частного набора сертификатов CA можно передать явный путь:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Используйте действительно одобренный набор и оставьте проверку включённой. Для каждой политики маршрутизации держите отдельную Session вместо изменения одной, пока её используют другие задачи.
Если ни один вариант не объясняет маршрут приложения, сравните изолированную Session с приложением в одной среде выполнения и на одном безвредном назначении. Запишите имеющиеся переменные прокси, значение trust_env и передачу proxies в вызов; не включайте URL с учётными данными в общие журналы. Успех изолированной Session направляет следующую проверку на создание Session, адаптеры, обработку подготовленных запросов или собственные транспорты. Проверка окружения через curl не определяет собственное поведение объединения Requests.