首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >urllib2.ProxyHandler在从python-2.5升级到2.7时使用HTTPS回归

urllib2.ProxyHandler在从python-2.5升级到2.7时使用HTTPS回归
EN

Stack Overflow用户
提问于 2013-02-21 02:19:13
回答 1查看 694关注 0票数 2

从python-2.5升级到python-2.7时,以下代码被破坏:

代码语言:javascript
复制
>>> import urllib
>>> import urllib2
>>> from django.conf import settings

>>> settings.AUTH_URL
'https://auth.example.net/auth/'
>>> settings.HTTP_PROXY
{'http': 'http://proxy.example.net', 'https': 'https://proxy.example.net'}
>>> cred = urllib.urlencode({'username': 'someuser', 'password': 'somepasswd'})

>>> urllib2.urlopen(settings.AUTH_URL, data=cred).read()
'<?xml version="1.0" encoding="UTF-8"?><auth><username value="someuser">true</username><password>true</password></auth>'

>>> urllib2.build_opener().open(settings.AUTH_URL, data=cred).read()
'<?xml version="1.0" encoding="UTF-8"?><auth><username value="someuser">true</username><password>true</password></auth>'

>>> urllib2.build_opener(urllib2.ProxyHandler(settings.HTTP_PROXY)).open(settings.AUTH_URL, data=cred).read()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 394, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 412, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1207, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
    raise URLError(err)
URLError: <urlopen error [Errno 111] Connection refused>

>>> opener = urllib2.build_opener(urllib2.ProxyHandler(settings.HTTP_PROXY))
>>> opener
<urllib2.OpenerDirector instance at 0x1bc39d40>
>>> opener.__dict__
{'addheaders': [('User-agent', 'Python-urllib/2.7')],
 'handle_error': {'http': {301: [<urllib2.HTTPRedirectHandler instance at 0x1bc3f7a0>],
                       302: [<urllib2.HTTPRedirectHandler instance at 0x1bc3f7a0>],
                       303: [<urllib2.HTTPRedirectHandler instance at 0x1bc3f7a0>],
                       307: [<urllib2.HTTPRedirectHandler instance at 0x1bc3f7a0>],
                       'default': [<urllib2.HTTPDefaultErrorHandler instance at 0x1bc3f7e8>]}},
 'handle_open': {'file': [<urllib2.FileHandler instance at 0x1bc43098>],
             'ftp': [<urllib2.FTPHandler instance at 0x1bc3ffc8>],
             'http': [<urllib2.ProxyHandler instance at 0x1bfa0638>,
                      <urllib2.HTTPHandler instance at 0x1bc3f758>],
             'https': [<urllib2.ProxyHandler instance at 0x1bfa0638>,
                       <urllib2.HTTPSHandler instance at 0x1bc43200>],
             'unknown': [<urllib2.UnknownHandler instance at 0x1bc3f830>]},
 'handlers': [<urllib2.ProxyHandler instance at 0x1bfa0638>,
          <urllib2.UnknownHandler instance at 0x1bc3f830>,
          <urllib2.HTTPHandler instance at 0x1bc3f758>,
          <urllib2.HTTPDefaultErrorHandler instance at 0x1bc3f7e8>,
          <urllib2.HTTPRedirectHandler instance at 0x1bc3f7a0>,
          <urllib2.FTPHandler instance at 0x1bc3ffc8>,
          <urllib2.FileHandler instance at 0x1bc43098>,
          <urllib2.HTTPSHandler instance at 0x1bc43200>,
          <urllib2.HTTPErrorProcessor instance at 0x1bc43128>],
 'process_request': {'http': [<urllib2.HTTPHandler instance at 0x1bc3f758>],
                 'https': [<urllib2.HTTPSHandler instance at 0x1bc43200>]},
 'process_response': {'http': [<urllib2.HTTPErrorProcessor instance at 0x1bc43128>],
                  'https': [<urllib2.HTTPErrorProcessor instance at 0x1bc43128>]}}
>>> sock = opener.open(settings.AUTH_URL, data=cred)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 394, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 412, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1207, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
    raise URLError(err)
URLError: <urlopen error [Errno 111] Connection refused>

最后一个表达式仍然适用于python-2.5,但不适用于具有相同代理和url设置的同一物理机上的2.7。知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-23 04:07:18

已通过从settings.HTTP_PROXY中删除“https”密钥但不确定原因解决。URL仍然是HTTPS。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14987106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档