mon*_*kut 5 python windows proxy
当在 Windows 上使用 urllib2(也可能是 urllib)时,Python 似乎神奇地拾取了应用于 InternetExplorer 的经过身份验证的代理设置。但是,它似乎没有检查和处理高级设置“例外”列表。
有没有办法让它处理例外列表?或者,忽略 IE 代理设置并应用我自己的代理开启器来解决此问题?
我之前尝试过创建代理开启器,但无法让它工作。这是我设法挖掘出的内容,但我仍然不知道如何/在哪里应用任何例外,我什至不确定这是否正确:
proxy_info = {
'host':'myproxy.com',
'user':Username,
'pass':Password,
'port':1080
}
http_str = "http://%(user)s:%(pass)s@%(host)s:%(port)d" % proxy_info
authInfo = urllib2.HTTPBasicAuthHandler()
authInfo.add_password()
proxy_dict = {'http':http_str}
proxyHandler = urllib2.ProxyHandler(proxy_dict)
# apply the handler to an opener
proxy_opener = urllib2.build_opener(proxyHandler, urllib2.HTTPHandler)
urllib2.install_opener(proxy_opener)
Run Code Online (Sandbox Code Playgroud)
默认情况下urllib2从环境变量获取代理设置,这就是它使用 IE 设置的原因。这非常方便,因为您不需要自己设置身份验证。
您不能像您想要的那样应用例外,最简单的方法是使用两个openers 并根据域是否在您的例外列表中决定使用哪一个。
当您想要使用代理时使用默认值opener,当您不需要代理时使用不带代理的默认值:
>>> no_proxy = urllib2.ProxyHandler({})
>>> opener = urllib2.build_opener(no_proxy)
>>> urllib2.install_opener(opener)
Run Code Online (Sandbox Code Playgroud)
从这里。
编辑:
我是这样做的:
exclusion_list = ['http://www.google.com/', 'http://localhost/']
no_proxy = urllib2.ProxyHandler({})
no_proxy_opener = urllib2.build_opener(no_proxy)
default_proxy_opener = urllib2.build_opener()
url = 'http://www.example.com/'
if url in exclusion_list:
opener = no_proxy_opener
else:
opener = default_proxy_opener
page = opener.open(url)
print page
Run Code Online (Sandbox Code Playgroud)
您最大的问题是将网址与排除列表相匹配,但这是一个全新的问题。
| 归档时间: |
|
| 查看次数: |
2516 次 |
| 最近记录: |