Как использовать прокси в Python Requests (HTTP/HTTPS и пулинг сессий)
Обновлено:
Библиотека requests в Python принимает аутентифицированные прокси от VinaProxy через словарь proxies, где обе схемы 'http' и 'https' указывают на http://user:pass@ip:port. Привязка этого словаря к постоянному объекту requests.Session() повторно использует базовые TCP-сокеты для быстрого веб-скрейпинга с минимальными накладными расходами.
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 IP40 000 ₫
- От 5 IP35 000 ₫
- От 10 IP25 000 ₫
- От 20 IP25 000 ₫
- От 50 IP25 000 ₫
- От 100 IP25 000 ₫
- От 200 IP25 000 ₫
- От 500 IP25 000 ₫
- От 1000 IP22 000 ₫
- От 2000 IP20 000 ₫
- 1 IP40 000 ₫
- От 5 IP35 000 ₫
- От 10 IP25 000 ₫
- От 20 IP25 000 ₫
- От 50 IP25 000 ₫
- От 100 IP25 000 ₫
- От 200 IP25 000 ₫
- От 500 IP25 000 ₫
- От 1000 IP22 000 ₫
- От 2000 IP20 000 ₫
Форматирование словаря proxies и повторное использование Session
Вызов requests.get() для каждого URL создает новое TCP-соединение и выполняет TLS-рукопожатие заново. Привязка прокси к session = requests.Session() сохраняет туннель к прокси открытым для серии последовательных запросов.
| Параметр Requests | Рекомендуемый синтаксис | Техническое назначение |
|---|---|---|
Ключ 'http' | 'http://user:pass@ip:port' | Перенаправляет стандартные запросы HTTP через прокси |
Ключ 'https' | 'http://user:pass@ip:port' | Использует схему http://, чтобы urllib3 открыл туннель HTTP CONNECT для TLS |
Кортеж timeout | timeout=(5, 15) | Таймаут подключения 5 с и чтения 15 с предотвращает зависание потоков |
| Ротация пула | itertools.cycle(proxy_list) | Равномерно распределяет запросы по всему пулу статических IP |
Предотвращение распространенных ошибок urllib3 и ProxyError
- Всегда используйте
http://(а неhttps://) в качестве схемы URL прокси для обоих ключей'http'и'https', если только порт прокси явно не требует TLS-over-TLS - Кодируйте специальные символы в пароле с помощью
urllib.parse.quote(password, safe='') - Ошибка
407 Proxy Authentication Requiredозначает, что имя пользователя или пароль в строке URL не совпадают с данными в личном кабинете - Аналогичный синтаксис поддерживается в
httpx.Client(proxy='http://user:pass@ip:port')иaiohttpвsession.get(url, proxy=...)
Пошаговая инструкция
- 1
Преобразовать ip:port:user:pass в формат URL
Воспользуйтесь нашим конвертером форматов прокси для перевода списка VinaProxy в строки
http://user:pass@ip:port. - 2
Определить словарь proxies
Задайте в коде
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}. - 3
Привязать к экземпляру requests.Session()
Создайте
s = requests.Session()и вызовитеs.proxies.update(proxies)для включения пулингаKeep-Alive. - 4
Проверить выходной IP тестовым запросом
Выполните
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json()), чтобы подтвердить IP прокси.
Часто задаваемые вопросы
Почему для ключа 'https' используется префикс 'http://user:pass@ip:port'?
Префикс http:// сообщает библиотеке urllib3, как именно подключаться к самому прокси-серверу (через стандартный HTTP CONNECT), при этом ваш трафик к целевому сайту https:// полностью шифруется по TLS.
Как настроить ротацию 25 статических прокси в Python?
Загрузите 25 URL прокси в pool = itertools.cycle(PROXIES) и передавайте proxies={'http': p, 'https': p} на каждый запрос с разумным ограничением частоты запросов на один IP.
Ограничивает ли VinaProxy объем трафика при парсинге на Python?
Нет. Все тарифы выделенных IPv4 и статических прокси ISP включают неограниченный объем трафика.
Создайте пул прокси для Python с безлимитным трафиком
Мгновенная выдача выделенных IPv4 и статических ISP прокси в 7 странах мира.
Купить прокси для Python