Python 2.6.1中的urllib2是否支持通过https进行代理

时间:2009-06-23 00:50:29

标签: python proxy https urllib2

Python 2.6.1中的urllib2是否支持通过https进行代理?

我在http://www.voidspace.org.uk/python/articles/urllib2.shtml找到了以下内容:

  

请注意

     

目前urllib2不支持   通过a获取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网站时识别身份验证(我通过网址向网站提供用户名/密码)?

编辑: 不,我测试了

   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错误   [Errno 8] _ssl.c:480:EOF发生在   违反协议

3 个答案:

答案 0 :(得分:6)

在Python 2.6.3和其他几个分支中修复:

答案 1 :(得分:3)

我不确定您引用的Michael Foord的文章是否已更新为Python 2.6.1 - 为什么不尝试一下?正如你现在所做的那样,不要告诉ProxyHandler代理只对http有用,也可以将其注册为https(当然你应该在调用ProxyHandler之前将其格式化为变量,并且只需在dict):这可能会也可能不会起作用,但是,你甚至不会尝试,而确定不能正常工作! - )

答案 2 :(得分:3)

将来其他人都有这个问题我想指出它现在支持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