如何向urllib2打开器添加标题?

34
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    
opener.open('http://abc.com')
opener.open('http://google.com')

正如您所看到的,我使用opener访问不同的网站,使用cookie jar。我是否可以设置一个标题,以便每次访问网站时,该标题都会应用?


你尝试过什么?(http://whathaveyoutried.com) - Piotr Dobrogost
2个回答

63
你可以直接将标题添加到由build_opener返回的OpenerDirector对象中。来自urllib2文档中的最后一个示例说明了这一点:

OpenerDirector会自动向每个请求添加User-Agent标题。要更改此设置:

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')
此外,记住当请求被传递给urlopen()(或OpenerDirector.open())时,会添加一些标准头部(Content-Length、Content-Type和Host)。

6
@PiotrDobrogost,公平地说,这个特定的功能缺乏文档支持。OpenerDirector类的概述信息很简略,上述信息很容易被忽略。 - senderle

18
headers = {'foo': 'bar',}
req = urllib2.Request(url, None, headers)
resp = urllib2.urlopen(req)
或者
req = urllib2.Request(url)
req.add_header('foo', 'bar')
resp = urllib2.urlopen(req)

2
opener 是一个完全不同的对象,你不能在这种情况下使用 Request - ahmet alp balkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接