Python urrllib2在add_header上抛出AttributeError,但仅在本地抛出

时间:2014-08-01 23:24:16

标签: python urllib2

我遇到了一个奇怪的问题。

简单的python代码:

import urllib2

request = urllib2.Request('http://google.com')
request.add_header('foo', 'bar')

response = urllib2.urlopen(request)
data = response.read()
print data

在add_header上引发AttributeError。这是追溯:

Traceback (most recent call last):
 File "C:/path/to/bizarro.py", line 4, in <module>
  request.add_header('foo', 'bar')
 File "C:\Python27\lib\urllib2.py", line 229, in __getattr__
  raise AttributeError, attr
AttributeError: add_header

当我在远程linux服务器上运行时,这个确切的代码工作正常。

此外,添加标题可以使用build_opener:

opener = urllib2.build_opener()
opener.addheaders = [('foo', 'bar')]
response = opener.open('http://google.com')
print response.read()

感觉它与python或windows有关(我正在运行Windows 7)。 我已经咨询了谷歌,但到目前为止没有任何暗示。有没有人喜欢这样的事情?有什么想法寻找解决方案吗?

1 个答案:

答案 0 :(得分:0)

感谢Padraic Cunningham指出我正确的方向!

urrlib2.py缺少一行。 WTF?这是add_header方法的声明。

应该是这样的:

def add_header(self, key, val):
    # useful for something like authentication
    self.headers[key.capitalize()] = val

就像是

    # useful for something like authentication
    self.headers[key.capitalize()] = val

这是图书馆中唯一遗漏的一条线。我添加了它,代码可以运行。

编辑:考虑一下,我认为我可能会自己意外删除它。在IDE(PyCharm)中,我可以通过Ctrl +单击add_header意外进入lib,快速按Ctrl + x删除我经常使用的行,你就可以了。