Держите рабочий темп | Скидка 10% на статические датацентровые прокси по промокоду

Купить прокси

Как использовать прокси с Python Requests

Как использовать прокси с Python Requests

Краткий ответ

Добавьте к вызову requests.get() аргумент proxies с настройками вашего подключения. В примере один сервер указан для обращений к HTTP- и HTTPS-ресурсам, а результат выводится через сервис определения IP.

import requests

proxy_url = "http://proxy.example.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}

response = requests.get(
    "https://httpbin.org/ip",
    proxies=proxies,
    timeout=(5, 20),
)
response.raise_for_status()
print(response.json())

Перед запуском замените адрес и порт на выданные вам. Домен proxy.example.com оставлен как образец: за ним не стоит готовый прокси для проверки. Если доступ защищен логином и паролем, строку подключения потребуется дополнить учетными данными. Ниже разберем, как собрать ее без ошибок в разделителях.

Главное

  • В записи proxies нужно отдельно читать ключ и значение: первый относится к адресу сайта, второе – к выбранному посреднику.
  • Проверяйте всю строку логина, в том числе служебные части, которые добавляет провайдер.
  • Сохраненные cookies и сохраненный выходной IP – два разных условия работы.
  • Для скрипта на сервере исходное сетевое окружение тоже серверное. IP домашнего браузера здесь не подходит для сравнения.
  • При сбое сначала зафиксируйте, что произошло: исключение в Python или ответ с HTTP-статусом.
  • Готовую строку с паролем нельзя бездумно выводить в лог, даже если сам пароль хранится вне файла программы.

Зачем использовать прокси с Python Requests?

Прокси нужен, когда для задачи важно, откуда скрипт обращается к ресурсу. Например, при проверке регионального каталога требуется запрос из выбранной страны, а затем разбор полученной страницы.

Представим, что вы проверяете наличие товара в каталоге для определенного рынка. Ссылка на товар остается прежней, меняется подключение. Но страница может учитывать и другие данные: регион в профиле, cookies, выбранную валюту. Эти условия стоит записать вместе с результатом, иначе разные ответы легко ошибочно объяснить только сменой IP.

Общий процесс сбора и извлечения информации описан в статье «Парсинг данных: что это такое и как он работает». Здесь задача уже: задать маршрут в Requests и получить достаточно сведений для его проверки.

Начните с одного обращения. Пока используются один endpoint и один целевой адрес, исправление настроек можно проверить следующим запуском. После подключения нескольких потоков и ротации понять причину отдельного сбоя будет сложнее.

Как работает прокси с Python Requests?

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

У процесса есть три участника: машина с Python, инфраструктура прокси и сайт назначения. Словарь proxies остается на машине с Python – это данные для клиента. Он не добавляет еще один сервер между клиентом и прокси.

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

С HTTPS возникает частый вопрос: почему сайт защищен TLS, а в настройке прокси написано http://? HTTP-прокси может открыть туннель командой CONNECT. Уже через него клиент устанавливает TLS с сайтом. Следовательно, схема адреса посредника не обязана повторять схему целевого URL.

Маршрут запроса и ответа между Python Requests, прокси и сайтом; настройки показаны рядом с клиентом, а сайт видит выходной IP прокси.

Как настроить прокси для одного запроса?

Возьмите пример из краткого ответа и подставьте свои реквизиты. Requests должен быть установлен в той Python-среде, которая будет выполнять файл:

python -m pip install requests

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

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

В коде указано timeout=(5, 20). Первое число ограничивает ожидание подключения, второе – ожидание чтения. Для небольшого диагностического обращения с них можно начать. Однако сумма чисел не задает точное время завершения: чтение связано с поступлением данных, а не с общим сроком работы программы.

Как передать логин и пароль прокси?

Для HTTP Basic-авторизации добавьте учетные данные перед именем сервера. Получается строка вида схема://логин:пароль@сервер:порт.

Проблема может возникнуть еще до проверки пароля на стороне провайдера. Допустим, внутри пароля есть @. При сборке адреса этот символ должен остаться частью значения, а не стать границей перед сервером. Поэтому компоненты кодируются по отдельности:

from urllib.parse import quote

username = quote("YOUR_USERNAME", safe="")
password = quote("YOUR_PASSWORD", safe="")
proxy_url = f"http://{username}:{password}@proxy.example.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}

Полученный proxies подставьте в первый запрос вместо словаря без авторизации. Значения YOUR_USERNAME и YOUR_PASSWORD служат образцами. Рабочие данные лучше передавать программе через закрытые настройки среды; полный вариант приведен ближе к концу статьи.

Если авторизацию требует еще и целевой сайт, ее нужно настроить отдельно. Аргумент auth=(username, password) относится к сайту. Передача туда аккаунта прокси не решает вопрос доступа к посреднику.

Страница MangoProxy для разработчиков поможет сопоставить поля с примером интеграции. Для своего запуска используйте актуальные реквизиты выбранного подключения, включая полный логин. Демонстрационный endpoint и данные другого продукта не следует считать взаимозаменяемыми.

Как использовать прокси в requests.Session()?

Создайте Session один раз и выполняйте связанные обращения через нее. В следующем примере прокси задан непосредственно при каждом вызове, поэтому выбранное подключение видно рядом с отправкой запроса.

import requests

proxy_url = "http://proxy.example.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}

with requests.Session() as session:
    for url in ("https://httpbin.org/ip", "https://httpbin.org/get"):
        response = session.get(url, proxies=proxies, timeout=(5, 20))
        response.raise_for_status()
        print(response.status_code)

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

В чужом коде вы можете встретить session.proxies.update(proxies). Этот способ поддерживается, но у него есть оговорка: обнаруженные в окружении настройки прокси способны переопределять значения уровня Session. В примере выше словарь передается явно, без зависимости от таких значений по умолчанию для указанных протоколов.

Теперь отдельно проверьте требования к IP. Если действия на сайте должны выполняться с одного адреса, настройка Python-клиента закрывает только часть задачи. Выходной узел выбирает провайдер. Посмотрите условия фиксированного адреса или sticky-сессии: одинаковая строка шлюза в двух вызовах еще не подтверждает одинаковый выход.

Как проверить, что запрос действительно прошел через прокси?

Получите два наблюдения из среды, где работает программа: без явно заданного прокси и с ним. Если файл выполняется в облаке, обе проверки должны происходить там же.

Для отдельного диагностического запуска можно исключить конфигурацию окружения, которую обычно учитывает Requests:

import requests

proxy_url = "http://proxy.example.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}
check_url = "https://httpbin.org/ip"

with requests.Session() as session:
    session.trust_env = False
    direct = session.get(check_url, timeout=(5, 20))
    direct.raise_for_status()
    proxied = session.get(check_url, proxies=proxies, timeout=(5, 20))
    proxied.raise_for_status()
    print("Исходный маршрут:", direct.json())
    print("Через прокси:", proxied.json())

Сначала оцените второй результат: относится ли полученный адрес к ожидаемой выходной сети? Несовпадение с адресом входного шлюза само по себе не означает ошибку. Один узел принимает подключение клиента, другой может обращаться к сайту.

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

Строка trust_env=False действует на поведение Requests. VPN и системные маршруты она не отключает. Кроме того, перестают подхватываться определенные настройки авторизации и доверенных сертификатов из окружения. В корпоративной среде необходимые параметры могут потребовать явного задания.

Инструмент MangoProxy «Узнать свой IP» относится к отдельной проверке браузера. Если вы открыли его на ноутбуке, а Python работает в облачном блокноте, проверяются разные подключения. Даже на одной машине браузер и скрипт могут использовать разные настройки.

После разбора IP обратитесь к нужной странице каталога или API. Сохраните ее статус и содержание отдельно: ответ сервиса определения IP не показывает, примет ли другой сайт тот же запрос.

Можно ли использовать SOCKS5 в Requests?

Да, для совместимого SOCKS-endpoint нужно установить дополнительную поддержку:

python -m pip install "requests[socks]"

Затем вместо HTTP-настройки можно использовать такую:

proxy_url = "socks5h://proxy.example.com:1080"
proxies = {"http": proxy_url, "https": proxy_url}

При выборе схемы обратите внимание на разрешение доменного имени. Вариант socks5 оставляет эту работу клиенту, socks5h передает ее стороне прокси. Проверка публичного IP не отвечает на вопрос, где произошло разрешение имени.

Сервер и порт должны поддерживать выбранный протокол. Здесь показана возможность библиотеки; ее применимость к вашему подключению MangoProxy определяется выданными настройками продукта.

Какой тип прокси выбрать для Python Requests?

Сначала сформулируйте требования к запуску. Для регионального каталога нужна подходящая страна. Для последовательности действий в аккаунте может дополнительно потребоваться сохранение адреса на время всей операции.

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

Статья «Какие прокси выбрать: сравнение типов прокси» поможет сузить выбор между резидентскими, ISP, серверными и мобильными сетями. После этого изучите условия конкретного подключения. Даже два предложения одной категории могут отличаться доступными локациями и правилами работы сессий.

Что проверять при ошибках подключения?

Сохраните первое свидетельство сбоя: тип исключения либо HTTP-ответ. Если сразу менять пароль, порт и время ожидания, следующий запуск может остановиться уже по другой причине, и сравнивать результаты станет труднее.

Схема диагностики ошибок прокси в Python Requests: проверка соединения и протокола, авторизации прокси и HTTP-ответов сайта 403 и 429.

407 Proxy Authentication Required

Вернитесь к полям доступа. Сверьте логин целиком, включая добавленные провайдером параметры, затем пароль и обработку специальных символов. Отказ при создании HTTPS-туннеля может проявиться как ProxyError еще до появления обычного объекта response.

Ошибка соединения или протокола

Проверьте, какой режим принимает endpoint. Когда сервер ожидает HTTP, префикс https:// заставляет клиента начать другое согласование соединения. Само редактирование строки не добавляет серверу TLS. Также имеет значение доступность порта именно с машины, где запущен файл.

Timeout

Повторите короткую проверку IP с теми же настройками. Если она завершается, а загрузка каталога останавливается, есть повод изучить целевой ресурс и объем ответа. Если ожидание превышено в обоих случаях, начните с общей части подключения. Так увеличение timeout будет опираться на наблюдение, а не на догадку.

403 или 429

При этих статусах уже есть HTTP-ответ, который нужно разобрать. Для 403 проверьте условия доступа и отправленный запрос. Для 429 уменьшите частоту обращений и посмотрите указания Retry-After, если они переданы. Ни один из этих статусов сам по себе не доказывает ошибку пароля прокси.

Ошибка сертификата

Уточните, какой сертификат не прошел проверку, соответствует ли ему имя сервера и что входит в доверенную цепочку среды. Если сеть использует TLS-инспекцию, может понадобиться настройка утвержденных сертификатов. Проверку подлинности соединения при этом оставляйте включенной.

Дополнительные варианты разбора собраны в гайде по ошибкам прокси. Для отдельного наблюдения за подключением пригодится прокси-чекер MangoProxy. Если чекер проходит проверку, а скрипт останавливается, сравните условия двух запусков: это полезная зацепка для диагностики, а не противоречие, которое можно проигнорировать.

Как не раскрыть логин и пароль в коде?

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

При наличии штатного хранилища секретов используйте его. Особое внимание уделите логам: собранный proxy URL уже содержит учетные данные, даже если исходные значения были получены из защищенного места.

Следующий вариант рассчитан на HTTP-прокси. Перед его выполнением приватно задайте PROXY_HOST, PROXY_PORT, PROXY_USERNAME и PROXY_PASSWORD:

import os
from urllib.parse import quote
import requests

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

try:
    response = requests.get(
        "https://httpbin.org/ip",
        proxies=proxies,
        timeout=(5, 20),
    )
    response.raise_for_status()
    print(response.json())
except requests.exceptions.ProxyError:
    print("Ошибка прокси. Проверьте сервер и авторизацию.")
except requests.exceptions.Timeout:
    print("Тайм-аут. Сравните доступность прокси и целевого сайта.")
except requests.exceptions.HTTPError as exc:
    print("HTTP-ошибка:", exc.response.status_code)
except ValueError:
    print("Сервис проверки IP вернул ответ не в формате JSON.")
except requests.exceptions.RequestException:
    print("Запрос не выполнен. Проверьте соединение и сертификаты.")

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

Попробуйте настройку с MangoProxy

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

Глоссарий

Прокси – сервис, принимающий соединение клиента и открывающий дальнейшее подключение к ресурсу.

Авторизация прокси – проверка права пользоваться этим сервисом до передачи трафика.

Requests Session – клиент для связанных обращений с общими cookies, настройками и ресурсами соединений.

Ротация IP – изменение выходного адреса, обслуживающего запросы, по правилам провайдера.

Sticky-сессия – режим удержания выходного адреса в течение согласованного периода или сессии с учетом условий продукта.

Тайм-аут – предел ожидания на отдельном этапе подключения или чтения; его значение не назначает время завершения всего скрипта.

Итоги

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

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

Здесь мы ответили на самые часто задаваемые вопросы. Все равно не можешь найти ответа?

Задать вопрос

Куда записать адрес прокси в вызове Requests?

Он должен находиться в словаре, переданном как proxies=. Запись с ключом https выбирает посредника для обращения к HTTPS-ресурсу.

Почему для HTTPS-сайта в примере указан HTTP-прокси?

TLS-соединение с сайтом может проходить через туннель HTTP-прокси. Схема https:// в адресе самого посредника нужна, когда его endpoint ожидает TLS от клиента.

Что делать с символом @ внутри пароля?

Закодировать компонент пароля до сборки адреса. Тогда внутренний символ не будет принят за разделитель между учетными данными и сервером.

Можно ли рассчитывать на Session для сохранения IP?

Для последовательности с постоянным адресом нужно дополнительно проверить условия его удержания у провайдера. Сам Python-клиент решает другую часть задачи – сохранение состояния обращений.

С каким IP сравнивать результат облачного блокнота?

С наблюдением из среды этого же блокнота. Адрес домашнего подключения относится к другому сетевому пути.

Что меняет буква h в socks5h?

Она указывает на разрешение имени через прокси. При socks5 эту работу выполняет клиент. Оба режима требуют дополнительной SOCKS-поддержки в Requests.

Почему IP определился, а страница товара не загрузилась?

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

Обязательно ли устанавливать Python на свой компьютер?

Код можно запускать в приватной облачной Python-среде. В ней должны быть библиотека, закрытый доступ к реквизитам и разрешение на нужное исходящее соединение. Все диагностические обращения выполняйте там же.

★ ★ ★ ★ ★

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *