背景:由於環境的限制,我堅持使用python 2.4。所以requests
是不可能的。urllib2:如何安裝代理和http基本身份驗證處理程序作爲openers?
我希望能夠同時使用urllib2.HTTPBasicAuthHandler
和ProxyHandler
打開一個url。
如果我做這樣的事情:
proxy = urllib2.ProxyHandler({'http': 'http://myproxy.local'})
proxy_opener = urllib2.build_opener(proxy)
...
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
pass_handler = urllib2.HTTPBasicAuthHandler(passman)
...
urllib2.install_opener(urllib2.build_opener([proxy_opener, pass_handler]))
的代碼將停留在這一行:
urllib2.urlopen(target_url)
那麼,什麼是安裝兩個處理器的正確方法?
編輯:
我原來的版本有語法錯誤。該生產線
urllib2.install_opener(urllib2.build_opener(pass_handler), proxy_opener)
應該
urllib2.install_opener(urllib2.build_opener(pass_handler, proxy_opener)) # note the parenthesis
但作爲atupal表明,它應該是
urllib2.install_opener(urllib2.build_opener([proxy_opener, pass_handler]))
感謝您的回答,但你的代碼將導致此異常: AttributeError的:OpenerDirector實例沒有屬性「add_parent」。如果我切換到urllib2.build_opener([proxy_opener,pass_handler]),異常消失,但代碼卡在urllib2.urlopen。我會更新我的問題以反映狀態。 –
@AnthonyKong哦,我解決了錯誤。不需要列表,我們應該使用proxy_handler而不是proxy_opener。我添加一個例子,:),它適用於我。 – atupal