是否可以通过Python 2.5中的urllib2通过身份验证代理获取https页面?

时间:2009-07-20 11:20:31

标签: python proxy https urllib2

我正在尝试为现有脚本添加身份验证代理支持,因为脚本连接到https网址(使用urllib2.Request和urllib2.urlopen),抓取页面并根据其拥有的内容执行某些操作找到。最初我希望这就像简单地将urllib2.ProxyHandler({“http”:MY_PROXY})作为arg添加到urllib2.build_opener一样简单,而urllib2.build_opener又传递给urllib2.install_opener。不幸的是,当尝试执行urllib2.Request(ANY_HTTPS_PAGE)时,这似乎不起作用。谷歌搜索让我相信在python 2.5中的urllib2中的代理支持不支持https网址。这至少让我感到惊讶。

网络上似乎有解决方案,例如http://bugs.python.org/issue1424152包含urllib2httplib的补丁,旨在解决问题(当我尝试解决问题时)反而得到以下错误:urllib2.URLError: <urlopen error (1, 'error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol')>)。这里有一个食谱食谱http://code.activestate.com/recipes/456195,我打算接下来尝试。总而言之,虽然我很惊讶这不是“开箱即用”支持,这让我想知道我是否只是错过了一个明显的解决方案,所以简而言之 - 有没有人有一个简单的方法来获取https页面在Python 2.5中使用urllib2的身份验证代理?理想情况下这可行:

import urllib2
#perhaps the dictionary below needs a corresponding "https" entry? 
#That doesn't seem to work out of the box.
proxy_handler = urllib2.ProxyHandler({"http": "http://user:pass@myproxy:port"})
urllib2.install_opener( urllib2.build_opener( urllib2.HTTPHandler, 
                                              urllib2.HTTPSHandler,
                                              proxy_handler ))
request = urllib2.Request(A_HTTPS_URL)
response = urllib2.urlopen( request)
print response.read()

非常感谢

1 个答案:

答案 0 :(得分:1)

您可能需要查看httplib2。如果安装了examples模块,则其中一个socks声明支持SOCKS代理。