【问题标题】:Does urllib2 in Python 2.6.1 support proxy via httpsPython 2.6.1 中的 urllib2 是否支持通过 https 进行代理
【发布时间】:2010-11-05 00:46:24
【问题描述】:

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,我怀疑它没有通过代理 - 它只是以与我没有指定代理时相同的方式卡住。我需要通过代理出去。

我需要进行身份验证但不使用基本身份验证,通过 https 站点时 urllib2 是否会进行身份验证(我通过 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 错误 [Errno 8] _ssl.c:480: EOF 发生在 违反协议

【问题讨论】:

    标签: python proxy https urllib2


    【解决方案1】:

    以防其他人将来遇到此问题,我想指出它现在确实支持 https 代理,请确保代理也支持它,否则您可能会遇到使 python 库陷入无限循环的错误(这发生在我身上)。

    请参阅测试 https 代理支持的 python 源代码中的 unittest 以获取更多信息: http://svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我不确定您引用的 Michael Foord 的文章是否已更新到 Python 2.6.1 —— 为什么不试一试呢?而不是告诉 ProxyHandler 代理只对 http 有用,就像你现在所做的那样,也为 https 注册它(当然你应该在调用 ProxyHandler 之前将它格式化为一个变量,然后在dict):这可能有效也可能无效,但是,您甚至都没有尝试,那肯定无效!-)

        【讨论】:

        • 啊,明白了 :) 让我试试(顺便说一句,我已经弄清楚 curl 需要什么,但让它在 python 中运行仍然会很好)
        • 不幸的是,在传递给 ProxyHandler 的字典中将代理添加为“https”键并不能解决问题,因为 AFAIK 不支持 CONNECT HTTP 方法。使用 PyCurl 是最简单的解决方法,但对于分发代码,PyCurl 缺乏 Windows 支持(或至少易于安装)可能是一个很大的障碍。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        • 2012-10-11
        • 2022-11-07
        • 2020-09-05
        相关资源
        最近更新 更多