Вопрос-Ответ

Proxies with Python 'Requests' module

Прокси с модулем Python 'Requests'

Коротко и просто об отличном модуле запросов для Python.

Кажется, я не могу найти в документации, что должна содержать переменная 'proxies'. Когда я отправляю ему dict со стандартным значением "IP: PORT", он отклоняет его, запрашивая 2 значения. Итак, я предполагаю (поскольку это, похоже, не описано в документах), что первое значение - это ip, а второе - порт?

В документах упоминается только это:


прокси–серверы - (необязательно) Протокол сопоставления словаря с URL прокси-сервера.


Итак, я попробовал это... что я должен делать?

proxy = { ip: port}

и должен ли я преобразовать их в какой-либо тип, прежде чем помещать их в dict?

r = requests.get(url,headers=headers,proxies=proxy)
Переведено автоматически
Ответ 1

Синтаксис proxies' dict является {"protocol": "scheme://ip:port", ...}. С его помощью вы можете указать разные (или одинаковые) прокси для запросов, использующих протоколы http, https и ftp:

http_proxy  = "http://10.10.1.10:3128"
https_proxy = "https://10.10.1.11:1080"
ftp_proxy = "ftp://10.10.1.10:3128"

proxies = {
"http" : http_proxy,
"https" : https_proxy,
"ftp" : ftp_proxy
}

r = requests.get(url, headers=headers, proxies=proxies)

Выведено из requests документации:


Параметры:

method метод для нового объекта запроса.

url – URL для нового объекта запроса.
...

proxies (необязательно) Сопоставление протокола с URL прокси.
...



В Linux вы также можете сделать это с помощью HTTP_PROXY, HTTPS_PROXY и FTP_PROXY переменных окружения:

export HTTP_PROXY=10.10.1.10:3128
export HTTPS_PROXY=10.10.1.11:1080
export FTP_PROXY=10.10.1.10:3128

В Windows:

set http_proxy=10.10.1.10:3128
set https_proxy=10.10.1.11:1080
set ftp_proxy=10.10.1.10:3128
Ответ 2

Вы можете обратиться к документации по прокси здесь.

Если вам нужно использовать прокси, вы можете настроить отдельные запросы с аргументом proxies для любого метода запроса:

import requests

proxies = {
"http": "http://10.10.1.10:3128",
"https": "https://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

Чтобы использовать базовую аутентификацию HTTP с вашим прокси, используйте http://user:password@host.com/ синтаксис:

proxies = {
"http": "http://user:pass@10.10.1.10:3128/"
}
Ответ 3

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

import urllib

...
r = requests.get('http://example.org', proxies=urllib.request.getproxies())

Он работает действительно хорошо, и urllib также знает о получении настроек Mac OS X и Windows.

Ответ 4

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

AssertionError: Not supported proxy scheme None

Исправление заключалось в указании http:// в URL прокси таким образом:

http_proxy  = "http://194.62.145.248:8080"
https_proxy = "https://194.62.145.248:8080"
ftp_proxy = "10.10.1.10:3128"

proxyDict = {
"http" : http_proxy,
"https" : https_proxy,
"ftp" : ftp_proxy
}

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

Редактировать: я вижу, что основной ответ теперь обновлен, чтобы отразить это :)

2023-08-06 00:47 python python-requests