Использование IP-адреса прокси в Python Requests
Явно задавайте маршруты прокси для отдельных запросов в Requests, выбирайте схему конечной точки и обрабатывайте тайм-ауты и ошибки HTTPS-туннеля.
Если Requests доступен в проекте, передайте вызову сопоставление прокси:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
Замените конечную точку обратной петли работающим прокси или кандидатом из списка HTTP-прокси, который проверите этим запросом. Ключи обозначают схемы назначения: http для HTTP-URL и https для HTTPS-URL. Значения описывают слушающий порт прокси. Это могут быть разные конечные точки, если сеть требует отдельных маршрутов.
Значение прокси с http:// под ключом https задано намеренно. Requests запрашивает CONNECT-туннель у HTTP-порта прокси, а затем устанавливает через него TLS с целевым сервером с учётом политики прокси для адресов и портов назначения. Замена значения на https:// запрашивает TLS с самим прокси; это может не сработать, если порт ожидает незашифрованный HTTP.
Что означают два числа тайм-аута
timeout=(5, 15) задаёт тайм-ауты соединения и чтения. Это не общий срок в пятнадцать секунд. Периодически поступающие данные, несколько адресов и попыток соединения могут увеличить затраченное время. Если опустить настройку, Requests не задаёт общего тайм-аута, поэтому выбирайте пределы с учётом ответа и добавляйте срок на уровне приложения, если нужен строгий общий бюджет времени.
Обрабатывайте ошибку на этапе её возникновения
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
Отклонённый CONNECT может вызвать ProxyError ещё до появления ответа целевого сервера. Ветка HTTPError следует за полученным ответом со статусом ошибки; Timeout означает истечение настроенного предела. Исследуйте цепочки исключений соединения локально и удаляйте конечные точки с учётными данными и частные URL перед передачей другим.
Оставляйте проверку сертификатов включённой. Если разрешённая сеть использует частный CA или управляемый перехват, предоставьте ожидаемые материалы доверия вместо отключения проверки.
Явные записи для каждого запроса управляют указанными здесь маршрутами, но пропущенные схемы по-прежнему могут зависеть от обнаружения прокси в окружении. При переносе вызова в повторно используемую Session решите, как должны взаимодействовать переменные окружения, значения по умолчанию Session и переопределения на уровне запроса; повторное использование соединений и политика маршрутизации — отдельные решения.