我打開網址:代理與urllib2的
site = urllib2.urlopen('http://google.com')
而我想要做的是同樣的方式與代理 我得到的地方告訴我連接:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
但那也沒用。
我知道urllib2有類似代理處理程序的東西,但我不記得那個函數。
我打開網址:代理與urllib2的
site = urllib2.urlopen('http://google.com')
而我想要做的是同樣的方式與代理 我得到的地方告訴我連接:
site = urllib2.urlopen('http://google.com', proxies={'http':'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')
您必須安裝一個ProxyHandler
urllib2.install_opener(
urllib2.build_opener(
urllib2.ProxyHandler({'http': '127.0.0.1'})
)
)
urllib2.urlopen('http://www.google.com')
我得到 文件 「d:/桌面/桌面/ mygoogl」,第64行, 站點= url.urlopen('google.com) 文件「C:\ Python26 \ lib中\ urllib2.py 「,124行,在urlopen 返回_opener。開(網址,數據,超時) AttributeError的:ProxyHandler實例沒有屬性「打開」 – 2009-09-20 02:43:56
我錯過了一個電話給urllib2.build_opener() – dcrosta 2009-09-20 02:51:44
要使用系統默認代理(例如,從http_support環境變量),當前請求以下工作(不安裝到的urllib2全球) :
url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
您可以使用環境變量設置代理。
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')
你不應該使用eg os.environ ['http_proxy']在你的下面兩組例子中? – 2017-04-13 20:51:47
除了公認的答案: 我素文字給了我一個錯誤
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')
另外設置代理的命令行會話 打開命令行下,您可能要運行腳本
netsh winhttp set proxy YourProxySERVER:yourProxyPORT
在終端運行你的腳本。
如果我們想使用代理訪問網頁,也可以使用請求。 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]>
嗨,@ZelluX,我只想對某些功能設置啓用了代理,意味着什麼我必須安裝和卸載每次調用該函數的開罐器? – satoru 2011-11-11 08:42:15
@ Satoru.Logic也許你可以編寫一個裝飾器來簡化安裝/卸載過程? – ZelluX 2011-11-11 13:25:59
似乎'urllib2'中沒有'uninstall'方法,但我們可以進行一次性代理設置;我們不是「安裝」開放者,而是創建一個「請求」對象,並使用開放者來「打開」它。 – satoru 2011-11-11 13:39:04