Прокси с urllib2
Я открываю URL-адреса с помощью:
site = urllib2.urlopen('http://google.com')
и то, что я хочу сделать, это соединиться с прокси
Я получил где-то говорит мне:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
но это не сработало.
Я знаю, что urllib2 имеет что-то вроде прокси-обработчика, но я не могу вспомнить эту функцию.
7 ответов:
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com')
вы должны установить ProxyHandler
urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler({'http': '127.0.0.1'}) ) ) urllib2.urlopen('http://www.google.com')
вы можете установить прокси с помощью переменных среды.
import os os.environ['http_proxy'] = '127.0.0.1' os.environ['https_proxy'] = '127.0.0.1'
urllib2добавит обработчики прокси автоматически таким образом. Вам нужно установить прокси для разных протоколов отдельно, иначе они не будут работать (с точки зрения не прохождения прокси), см. ниже.например:
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com') # next line will fail (will not go through the proxy) (https) urllib2.urlopen('https://www.google.com')вместо
proxy = urllib2.ProxyHandler({ 'http': '127.0.0.1', 'https': '127.0.0.1' }) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) # this way both http and https requests go through the proxy urllib2.urlopen('http://www.google.com') urllib2.urlopen('https://www.google.com')
чтобы использовать системные прокси по умолчанию (например, из переменной среды http_support), для текущего запроса (без его установки в urllib2 глобально) работает следующее:
url = 'http://www.example.com/' proxy = urllib2.ProxyHandler() opener = urllib2.build_opener(proxy) in_ = opener.open(url) in_.read()
В дополнение к принятому ответу: Мой скипт дал мне ошибку
File "c:\Python23\lib\urllib2.py", line 580, in proxy_open if '@' in host: TypeError: iterable argument requiredрешение состояло в том, чтобы добавить http: / / перед строкой прокси:
proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com')
можно также использовать запросы, если мы хотели бы получить доступ к веб-странице с помощью прокси. Код Python 3:
>>> import requests >>> url = 'http://www.google.com' >>> proxy = '169.50.87.252:80' >>> requests.get(url, proxies={"http":proxy}) <Response [200]>также можно добавить несколько прокси-серверов.
>>> proxy1 = '169.50.87.252:80' >>> proxy2 = '89.34.97.132:8080' >>> requests.get(url, proxies={"http":proxy1,"http":proxy2}) <Response [200]>
кроме того, установите прокси для сеанса командной строки Откройте командную строку, в которой вы можете запустить свой скрипт
netsh winhttp set proxy YourProxySERVER:yourProxyPORTзапустить скрипт в терминале.
Comments