Использование прокси в сессии



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

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

В отдельном запросе достаточно добавить аргумент proxies в метод запроса:

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
response = requests.get('http://example.org', proxies=proxies)

Настройка для сессии

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

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
session = requests.Session()
session.proxies.update(proxies)
response = session.get('http://example.org')

Важно. Установка session.proxies может работать некорректно, поскольку указанные параметры перезаписываются системными прокси. Избежать такой ситуации можно, если явно указывать аргумент proxies для каждого запроса.

Далее будут разобраны примеры коды, которые позволят лучше понять принцип использования прокси в реальных задачах парсинга.

Автоматическое переключение прокси

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

import requests
from itertools import cycle

# Список прокси
proxies_list = [
    {'http': 'http://10.10.36.159:8000', 'https': 'https://10.10.36.159:8000'},
    {'http': 'http://10.10.51.205:8000', 'https': 'https://10.10.51.205:8000'},
    {'http': 'http://10.10.79.216:8000', 'https': 'https://10.10.79.216:8000'},
    # ... и так далее
]
proxy_pool = cycle(proxies_list)
url = "http://example.org"

# Создание сессии
session = requests.Session()
for i in range(1, 6):  # Попробуем сделать 5 запросов
    proxy = next(proxy_pool)
    session.proxies.update(proxy)  # Обновление прокси для сессии
    try:
        response = session.get(url, timeout=5)  # Используем сессию для выполнения запроса
        print(f"Request {i}: Success!")
    except requests.exceptions.RequestException as e:
        print(f"Request {i}: Failed, switching proxy. {proxy}")

При возникновении скрипт переключится на следующую запись в списке, что позволит корректно продолжить работу.

Стоит помнить, что requests по умолчанию не поддерживает SOCKS-прокси, однако можно дополнительно установить расширение socks, что позволяет добавить нужный функционал. Команда для установки:

pip install requests[socks]

После этого можно указать использование SOCKS-прокси.

Аутентификация на прокси

Если для доступа к прокси-серверу требуется аутентификация, необходимо использовать следующую конструкцию:

import requests

url = "https://httpbin.org/ip"
proxies = {
    'http': 'socks5://8ZYk5H:XfMpg7@10.10.36.159:8000',
    'https': 'socks5://Kx4Jcj:h4Ch0N@10.10.51.205:8000',
}

# Создаем сессию
session = requests.Session()

# Устанавливаем прокси для сессии
session.proxies.update(proxies)

# Делаем запрос
response = session.get(url)

print(response.text)


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: