不urllib2Python2.6.1支持代理通过https
题
做 urllib2 在Python2.6.1支持代理通过https?
我已经找到了以下在 http://www.voidspace.org.uk/python/articles/urllib2.shtml:
注意到
目前urllib2不支持 取https的位置,通过一个 代理。这可能是一个问题。
我试图自动登录在网站和下载文件,我已经有效的用户名和密码。
proxy_info = {
'host':"axxx", # commented out the real data
'port':"1234" # commented out the real data
}
proxy_handler = urllib2.ProxyHandler(
{"http" : "http://%(host)s:%(port)s" % proxy_info})
opener = urllib2.build_opener(proxy_handler,
urllib2.HTTPHandler(debuglevel=1),urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
fullurl = 'https://correct.url.to.login.page.com/user=a&pswd=b' # example
req1 = urllib2.Request(url=fullurl, headers=headers)
response = urllib2.urlopen(req1)
我已经工作了类似的网页,但不使用HTTPS和我怀疑它并没有获得通过代理-它只是被困在同样的方式作为当我没有指定代理。我需要走出去,通过代理。
我需要进行身份验证,但不是使用基本的认证,将urllib2图行验证时,要通过https网站(I供用户名/密码的网站的url通过)?
编辑:不,我测试了
proxies = {
"http" : "http://%(host)s:%(port)s" % proxy_info,
"https" : "https://%(host)s:%(port)s" % proxy_info
}
proxy_handler = urllib2.ProxyHandler(proxies)
而我错误:
urllib2.URLError:urlopen错误 [Errno8]_ssl.c:480:EOF发生在 违反了协议
解决方案
我不确定您引用的Michael Foord的文章是否已更新为Python 2.6.1 - 为什么不尝试一下?正如你现在所做的那样,不要告诉ProxyHandler代理只对http有用,也可以将其注册为https(当然你应该在调用ProxyHandler之前将其格式化为变量,并且只需在dict):这可能会也可能不会起作用,但是,你甚至不会尝试,而确定不能正常工作! - )
其他提示
固定在Python2.6.3和其他几个分支:
- _bugs.python.org/issue1424152 (替换_http...)
http://www.python.org/download/releases/2.6.3/NEWS.txt
问题#1424152:修复httplib,urllib2支持SSL工作时通过 代理。原贴由克里斯托弗*李,改变成通过Senthil Kumaran.
将来其他人都有这个问题我想指出它现在支持https代理,确保代理也支持它,否则你可能会遇到将python库置于无限循环中的错误(这发生在我身上)。
请参阅python源代码中测试https代理支持的unittest以获取更多信息: http: //svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203