Настройка прокси в Python Requests: HTTP, SOCKS5 и ошибки

Команда Proxyca · 02.11.2026


Настройка прокси в Python Requests: HTTP, SOCKS5 и ошибки

Используйте Python Requests proxies аргумент для отправки запроса через прокси. Укажите адрес прокси, выданный вместе с заказом, храните учётные данные вне исходного файла и протестируйте один запрос, прежде чем добавлять цикл сбора данных. URL прокси описывает ваше подключение к прокси, а URL назначения описывает сайт, к которому вы хотите обратиться.

В этом руководстве рассматривается небольшая явная настройка HTTP-прокси. Для более широкой последовательности диагностики используйте руководство по проверке прокси-соединения.

Прежде чем начать: подготовьте хост, порт, поддерживаемый протокол и данные аутентификации. В примерах используются переменные окружения, поэтому в статье нет рабочих учётных данных. Значения тайм-аутов иллюстрируют конфигурацию; они не являются лимитами провайдера и не рекомендуются для каждой задачи.

Настройте прокси для одного запроса

Этот Документация по прокси для запросов показывает словарь, ключами которого служат схемы адреса назначения. В этом примере и HTTP-, и HTTPS-адреса назначения используют одну и ту же конечную точку HTTP-прокси. Если адрес назначения использует HTTPS, это не значит, что нужно автоматически менять URL прокси на https://.

import os
from urllib.parse import quote
import requests

host = os.environ["PROXY_HOST"]
port = int(os.environ["PROXY_PORT"])
user = quote(os.environ["PROXY_USER"], safe="")
password = quote(os.environ["PROXY_PASSWORD"], safe="")
proxy_url = f"http://{user}:{password}@{host}:{port}"
proxies = {"http": proxy_url, "https": proxy_url}

response = requests.get(
    "https://api.ipify.org?format=json",
    proxies=proxies,
    timeout=(10, 30),
)
response.raise_for_status()
print(response.json()["ip"])

Запускайте это, только если вы готовы отправить публичный IP вашего подключения в ipify. Вы можете подставить HTTPS-адрес, который контролируете сами. Первое значение — тайм-аут соединения, второе — тайм-аут чтения. Requests не делает этот кортеж общим ограничением по времени для всей операции.

Раздельное кодирование имени пользователя и пароля предотвращает проблемы с такими символами, как @ чтобы они случайно не стали разделителями URL. Храните некодированные учётные данные в своём окружении. Не выводите proxy_url, вставлять его в публичный issue или коммитить в репозиторий.

Сравните результат с базовым уровнем

Выполните тот же запрос IP без proxies аргумент, в отдельном процессе без переменных окружения, связанных с прокси. Сохраните оба результата в закрытом виде. Изменившийся адрес свидетельствует о наблюдаемом выходном адресе именно этого запроса, но не доказывает, что все приложения на вашем компьютере используют прокси.

Затем запросите страницу, которой вы владеете или к которой вам разрешён доступ. Не меняйте конечную точку и учётные данные. Так проблема соединения отделяется от ответа, характерного для одного конкретного адреса назначения. Если ipify работает, а ваша цель — нет, покупка другого пакета не должна быть первым диагностическим шагом: зафиксируйте статус или исключение и определите, какой компонент дал ответ.

Осознанно используйте Session

Для короткой последовательности запросов указывайте конфигурацию прокси явно при каждом вызове. Так пример проще проверить, и не придётся предполагать, что настройка на уровне сессии имеет приоритет над всеми настройками окружения.

with requests.Session() as session:
    response = session.get(
        "https://example.com/",
        proxies=proxies,
        timeout=(10, 30),
    )
    response.raise_for_status()
    print(response.status_code)

Session удобна для связанных запросов, но cookies, заголовки и аутентификацию стоит рассматривать отдельно. Учётные данные прокси нужны для аутентификации на прокси. Они не заменяют учётные данные аккаунта на целевом сайте или разрешение на сбор его данных.

Что насчёт SOCKS5 и DNS?

В документации Requests поддержка SOCKS описана как необязательная зависимость, которая устанавливается командой python -m pip install 'requests[socks]'. Its proxy URL scheme also controls DNS handling: socks5:// разрешает имена на стороне клиента, тогда как socks5h:// разрешает их через прокси. Убедитесь, что и конечная точка, и установленный у вас клиент поддерживают выбранную конфигурацию.

Используйте Руководство по SOCKS4 и SOCKS5 для контекста протокола. Возможности протокола не определяют, какими функциями обладает коммерческая конечная точка.

Делайте отчёты о сбоях полезными

Перехватывайте исключения там, где ваша программа может принять осмысленное решение. Тайм-аут означает, что операция превысила настроенное время ожидания. А ProxyError требует изучения первопричины. Для HTTP-ошибки нужны статус ответа и контекст. Эти наблюдения требуют разных исправлений.

Используйте Быстрый старт Requests как ссылку на исключение. Храните очищенную запись о времени, имени хоста назначения, настроенной схеме и типе ошибки. Не включайте пароли, заголовки авторизации и полные URL, содержащие секреты.

Часто задаваемые вопросы

Настраивает ли это также мой браузер?

Нет. Пример настраивает запросы, выполняемые этим вызовом Python. Отдельному браузеру или приложению нужна своя поддерживаемая конфигурация.

Нужно ли отключать проверку сертификата, если HTTPS не работает?

Не отключайте проверку как стандартное решение. Сравните ошибку с требованиями к сертификатам и сети, описанными для вашей среды. Выясните причину, прежде чем менять настройки доверия.

Где взять данные для подключения?

Откройте бот Proxyca, выберите тариф и доступную страну, затем используйте данные для подключения, выданные вместе с заказом. Храните эти данные в тайне. Открыть Proxyca в Telegram.