我遇到了一个奇怪的问题。
简单的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)。 我已经咨询了谷歌,但到目前为止没有任何暗示。有没有人喜欢这样的事情?有什么想法寻找解决方案吗?
答案 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删除我经常使用的行,你就可以了。