HTTP-прокси или SOCKS-прокси с модулем requests в Python
Запросы к сайтам через HTTP-прокси или SOCKS-прокси
Содержание:
- Запросы через HTTP-прокси;
- Запросы через SOCKS-прокси.
Запросы через HTTP-прокси.
Если необходимо использовать прокси-сервер для запросов к серверу, то для любого метода запроса можно передавать аргумент proxies , в который необходимо указать список прокси-серверов:
import requests # список прокси-серверов proxies = 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', > requests.get('http://example.org', proxies=proxies)
В качестве альтернативы можно настроить список прокси один раз для всего сеанса/сессии:
import requests proxies = 'http': 'http://10.10.1.10:3128', 'https': 'https://10.10.1.10:1080', > session = requests.Session() session.proxies.update(proxies) session.get('http://example.org')
Когда конфигурация прокси-серверов не переопределяется в Python, как показано выше, то по умолчанию библиотека requests полагаются на конфигурацию прокси-сервера, определенную стандартными переменными среды http_proxy , https_proxy , no_proxy и curl_ca_bundle . Также поддерживаются варианты этих переменных в верхнем регистре. Следовательно можно настроить их для использования в запросах (только те, которые соответствуют вашим потребностям):
$ export HTTP_PROXY="http://10.10.1.10:3128" $ export HTTPS_PROXY="https://10.10.1.10:1080" $ python3 >>> import requests >>> requests.get('http://example.org')
Чтобы использовать HTTP Basic Auth с прокси, необходимо использовать синтаксис http://user:password@host/ в любой из приведенных выше записей конфигурации:
# через переменные среды $ export HTTPS_PROXY="http://user:pass@10.10.1.10:1080" # в коде Python >>> proxies = 'http': 'http://user:pass@10.10.1.10:3128/'>
Предупреждение. Хранение конфиденциальной информации в открытом виде об имени пользователя и пароле в переменных средах или файле с кодом представляет собой угрозу безопасности и настоятельно не рекомендуется.
Чтобы предоставить прокси-сервер для конкретной схемы и хоста, используйте форму scheme://hostname для ключа. Это будет соответствовать для любого запроса заданной схеме и точному имени хоста.
proxies = 'http://10.20.1.128': 'http://10.10.1.10:5323'>
Обратите внимание, что URL-адреса прокси должны включать схему.
Наконец, обратите внимание, что использование прокси-сервера для HTTPS-соединений обычно требует, чтобы локальный компьютер доверял корневому сертификату прокси. По умолчанию список сертификатов, которым доверяют запросы, можно найти с помощью:
from requests.utils import DEFAULT_CA_BUNDLE_PATH print(DEFAULT_CA_BUNDLE_PATH)
Можно переопределить этот набор сертификатов по умолчанию, установив для стандартной переменной среды curl_ca_bundle другой путь к файлу:
# переопределяем набор сертификатов через переменные среды $ export curl_ca_bundle="/usr/local/myproxy_info/cacert.pem" $ export https_proxy="http://10.10.1.10:1080" # запускаем Python $ python3 >>> import requests # делаем запрос >>> requests.get('https://example.org')
Запросы через SOCKS-прокси.
Новое в версии 2.10.0.
Помимо основных HTTP-прокси, библиотека requests также поддерживает прокси, использующие протокол SOCKS. Это дополнительная функция, для которой перед использованием необходимо установить дополнительные сторонние библиотеки.
Вы можете получить зависимости для этой функции из pip:
$ python -m pip install requests[socks]
После того как установили эти зависимости, использовать SOCKS-прокси так же просто, как и HTTP-прокси:
# просто аргументу proxies необходимо # передать список SOCKS-прокси proxies = 'http': 'socks5://user:pass@host:port', 'https': 'socks5://user:pass@host:port' >
Использование схемы socks5 приводит к тому, что разрешение DNS происходит на клиенте, а не на прокси-сервере. Это соответствует утилите linux терминала curl , которая использует схему, чтобы решить, следует ли выполнять разрешение DNS на клиенте или прокси-сервере. Если необходимо разрешение DNS на прокси-сервере, то используйте socks5h в качестве схемы.
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- GET и POST запросы c модулем requests
- Получение/отправка заголовков сервера модулем requests
- Извлечение и установка cookies с модулем requests
- Сессии/сеансы Session() модуля requests
- Объект ответа сервера Response модуля requests
- Получение и отправка данных в виде JSON с модулем requests
- Установка timeout для модуля requests
- Объект PreparedRequest модуля requests
- Загрузка файлов на сервер модулем requests
- Загрузка больших данных модулем requests
- HTTP-прокси или SOCKS-прокси с модулем requests
- Использование хуков модуля requests
- Аутентификация с модулем requests
- SSL и модуль requests
Настройка прокси-серверов для пакета SDK Azure для Python
Если вашей организации требуется использовать прокси-сервер для доступа к интернет-ресурсам, необходимо задать переменную среды с сведениями о прокси-сервере для использования пакета SDK Azure для Python. Установка переменных среды (HTTP_PROXY и HTTPS_PROXY) приводит к тому, что пакет SDK Azure для Python будет использовать прокси-сервер во время выполнения.
URL-адрес прокси-сервера имеет форму http[s]://[username:password@]:/ , в которой необязательно использовать сочетание имени пользователя и пароля.
Вы можете затем настроить прокси-сервер глобально с помощью переменных среды или указать прокси-сервер, передав аргумент с именем proxies отдельному конструктору клиента или методу операции.
Глобальная конфигурация
Чтобы настроить прокси-сервер глобально для скрипта или приложения, определите переменные среды HTTP_PROXY или HTTPS_PROXY с URL-адресом сервера. Эти переменные работают с любой версией библиотек Azure. Обратите внимание, что HTTPS_PROXY не означает HTTPS прокси-сервер, а прокси-сервер для https:// запросов.
Такие переменные среды игнорируются при передаче параметра use_env_settings=False в конструктор объектов клиента или в метод операции.
Настройка из Azure CLI
rem Non-authenticated HTTP server: set HTTP_PROXY=http://10.10.1.10:1180 rem Authenticated HTTP server: set HTTP_PROXY=http://username:password@10.10.1.10:1180 rem Non-authenticated HTTPS server: set HTTPS_PROXY=http://10.10.1.10:1180 rem Authenticated HTTPS server: set HTTPS_PROXY=http://username:password@10.10.1.10:1180
# Non-authenticated HTTP proxy for HTTPS requests: export HTTPS_PROXY=http://10.10.1.10:1180 # Authenticated HTTP proxy for HTTPS requests: export HTTPS_PROXY=http://username:password@10.10.1.10:1180 # Non-authenticated HTTP proxy for HTTP requests: export HTTP_PROXY=http://10.10.1.10:1180 # Authenticated HTTP proxy for HTTP requests: export HTTP_PROXY=http://username:password@10.10.1.10:1180
Установка в коде Python
Параметры прокси-сервера можно задать с помощью переменных среды без пользовательской конфигурации.
import os os.environ["HTTP_PROXY"] = "http://10.10.1.10:1180" # Alternate URL and variable forms: # os.environ["HTTP_PROXY"] = "http://username:password@10.10.1.10:1180" # os.environ["HTTPS_PROXY"] = "http://10.10.1.10:1180" # os.environ["HTTPS_PROXY"] = "http://username:password@10.10.1.10:1180"
Настраиваемая конфигурация
Установка в коде Python для каждого клиента или каждого метода
Для пользовательской конфигурации можно указать прокси-сервер для определенного клиентского объекта или метода операции. Укажите прокси-сервер с именем proxies аргумента.
Например, в следующем коде из статьи Пример. Использование библиотек Azure со службой хранилища Azure указан прокси-сервер HTTPS с учетными данными пользователя с помощью конструктора BlobClient . В этом случае объект берется из библиотеки azure.storage.blob, которая основана на библиотеке azure.core.
from azure.identity import DefaultAzureCredential # Import the client object from the SDK library from azure.storage.blob import BlobClient credential = DefaultAzureCredential() storage_url = "your_url" blob_client = BlobClient(storage_url, container_name="blob-container-01", blob_name="sample-blob.txt", credential=credential, proxies= < "https": "https://username:password@10.10.1.10:1180" >) # Other forms that the proxy URL might take: # proxies= < "http": "http://10.10.1.10:1180" ># proxies= < "http": "http://username:password@10.10.1.10:1180" ># proxies= < "https": "https://10.10.1.10:1180" >
Как отправлять запросы через прокси?
В питоне есть отличная библиотека requests, которая частично отвечает на мой вопрос, но мне бы не хотелось к каждому запросу прописывать прокси. Возможно можно это как то глобально применить к проекту на django?
import requests from requests.auth import HTTPProxyAuth url = 'http://google.com/' proxies = auth = HTTPProxyAuth('my_login', 'my_password') response = requests.get(url=url, proxies=proxies, auth=auth) response.close() print(response.status_code) # 200 - good
Отслеживать
12.5k 7 7 золотых знаков 18 18 серебряных знаков 48 48 бронзовых знаков
задан 16 фев 2021 в 14:08
Eduard Kumskyi Eduard Kumskyi
43 6 6 бронзовых знаков
через requests можно просто proxies =
16 фев 2021 в 15:25
Можно попробовать через session у requests задать прокси и везде использовать объект сессии
16 фев 2021 в 15:29
я бы поднял что-то типа анонимного сквозного 3Proxy на выделенном сервере с укрианским ip
16 фев 2021 в 15:34
@Jack_oS правильно ли я понял, это ставится прямо на сервере рядом с тем же nginx и по факту мой адрес меняется на тот прокси, который я подключу? если так, то и сайт мой в таком случае теперь будет доступен по украинскому адресу.
16 фев 2021 в 15:38
нет, это должно быть на сервере в Украине: делаете запрос со своего бэка через этот прокси на другие сервисы, они увидят запросы с украинским ip
Как настроить Selenium для работы с прокси socks5 на Python: Подробное руководство с примерами кода
Selenium это мощный инструмент для автоматизации браузера, часто используемый для тестирования web-приложений, скрейпинга данных и многого другого. Однако, в некоторых ситуациях важно обеспечить безопасность и анонимность. В этой статье мы рассмотрим, как настроить Selenium для работы с прокси socks5 на Python.
SOCKS5 — это протокол, который передает пакеты данных между клиентом и сервером через прокси-сервер. Он поддерживает все типы трафика, включая TCP и UDP, и предоставляет аутентификацию на уровне прокси-сервера.
Чтобы Selenium мог работать с прокси socks5 на Python, следуйте этим шагам:
Установка зависимостей
Установите библиотеку pysocks , выполнив следующую команду:
pip install pysocks
Настройка прокси
Допустим, у вас есть прокси с адресом proxy.example.com и портом 1080 . Установите его следующим образом:
import socks import socket socks.set_default_proxy(socks.SOCKS5, "proxy.example.com", 1080) socket.socket = socks.socksocket
Настройка Selenium
Теперь, когда прокси установлен, вы можете настроить Selenium для его использования. Для этого вам потребуется webdriver, например, Firefox или Chrome:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("--proxy-server=socks5://proxy.example.com:1080") driver = webdriver.Chrome(chrome_options=options)
Тестирование настроек
Убедитесь, что все работает, запустив тестовую страницу:
driver.get("http://checkip.amazonaws.com/") print(driver.page_source) driver.quit()
Этот код откроет браузер, перейдет на страницу проверки IP и выведет результат. Проверьте, отличается ли этот IP от вашего реального.
Заключение
Настройка Selenium для работы с прокси socks5 на Python требует некоторого понимания протоколов и сетей, но благодаря этому руководству этот процесс должен быть более понятным. Вспомните, что использование прокси может замедлить процесс скрейпинга, но это обычно небольшая цена за анонимность и безопасность.
