urllib.urlopen工作,但urllib2.urlopen没有

Eli*_*ght 11 python urllib urllib2

我有一个我正在测试的简单网站.它在localhost上运行,我可以在我的Web浏览器中访问它.索引页面只是"运行"一词. urllib.urlopen将成功阅读该页面,但urllib2.urlopen不会.这是一个演示问题的脚本(这是实际的脚本而不是简化不同的测试脚本):

import urllib, urllib2
print urllib.urlopen("http://127.0.0.1").read()  # prints "running"
print urllib2.urlopen("http://127.0.0.1").read() # throws an exception
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

Traceback (most recent call last):
  File "urltest.py", line 5, in <module>
    print urllib2.urlopen("http://127.0.0.1").read()
  File "C:\Python25\lib\urllib2.py", line 121, in urlopen
    return _opener.open(url, data)
  File "C:\Python25\lib\urllib2.py", line 380, in open
    response = meth(req, response)
  File "C:\Python25\lib\urllib2.py", line 491, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python25\lib\urllib2.py", line 412, in error
    result = self._call_chain(*args)
  File "C:\Python25\lib\urllib2.py", line 353, in _call_chain
    result = func(*args)
  File "C:\Python25\lib\urllib2.py", line 575, in http_error_302
    return self.parent.open(new)
  File "C:\Python25\lib\urllib2.py", line 380, in open
    response = meth(req, response)
  File "C:\Python25\lib\urllib2.py", line 491, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python25\lib\urllib2.py", line 418, in error
    return self._call_chain(*args)
  File "C:\Python25\lib\urllib2.py", line 353, in _call_chain
    result = func(*args)
  File "C:\Python25\lib\urllib2.py", line 499, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 504: Gateway Timeout
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我可能最终需要一些更高级的功能urllib2,所以我不想只是求助于使用urllib,而且我想了解这个问题.

Joh*_*kin 16

听起来你已经定义了urllib2正在接收的代理设置.当它尝试代理"127.0.0.01/"时,代理放弃并返回504错误.

来自Obscure python urllib2代理问题:

proxy_support = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_support)
print opener.open("http://127.0.0.1").read()

# Optional - makes this opener default for urlopen etc.
urllib2.install_opener(opener)
print urllib2.urlopen("http://127.0.0.1").read()
Run Code Online (Sandbox Code Playgroud)