gpt4 book ai didi

python - urllib2:如何将代理和 http 基本身份验证处理程序安装为开启者?

转载 作者:行者123 更新时间:2023-11-28 22:51:13 25 4
gpt4 key购买 nike

背景: 由于环境限制,我只能使用 python 2.4。所以 requests 是不可能的。

我希望能够同时使用 urllib2.HTTPBasicAuthHandlerProxyHandler 打开一个 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]))

最佳答案

阅读docs-install_openerdocs-build_opener

urllib2.install_opener(opener)

Install an OpenerDirector instance as the default global opener.

urllib2.build_opener([handler, ...])

Return an OpenerDirector instance, which chains the handlers in the order given. handlers can be either instances of BaseHandler, or subclasses of BaseHandler (in which case it must be possible to call the constructor without any parameters). Instances of the following classes will be in front of the handlers, unless the handlers contain them, instances of them or subclasses of them: ProxyHandler (if proxy settings are detected), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.

所以你应该首先使用代理处理程序和授权处理程序构建一个开启器。如果需要,可以全局安装它:

proxy_handler = urllib2.ProxyHandler({'http': 'http://myproxy.local'})

...
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
pass_handler = urllib2.HTTPBasicAuthHandler(passman)
...
urllib2.install_opener(urllib2.build_opener(proxy_handler, pass_handler))

更新:我测试了以下代码片段,它按预期工作。不要忘记将代理、网址、用户名和密码替换为您自己的:

import urllib2

proxyhandler = urllib2.ProxyHandler({'http': 'http://219.93.183.106:8080'})

url = "http://atupal.org:9001"
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, "myusername", "mypassword")
pass_handler = urllib2.HTTPBasicAuthHandler(passman)

opener = urllib2.build_opener(
proxyhandler,
pass_handler,
)
urllib2.install_opener(opener)

print urllib2.urlopen(url).read()

关于python - urllib2:如何将代理和 http 基本身份验证处理程序安装为开启者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com