如何为urllib2 opener添加标题?

TIM*_*MEX 33 python header http urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    
opener.open('http://abc.com')
opener.open('http://google.com')
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用开瓶器访问不同的网站,使用cookie罐.我可以设置一个标题,以便每次有网站时,都会应用标题吗?

sen*_*rle 61

您可以将标头直接添加到OpenerDirector返回的对象中build_opener.从urllib2文档中的最后一个示例:

OpenerDirector自动为每个请求添加User-Agent标头.要改变这个:

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')
Run Code Online (Sandbox Code Playgroud)

另外,请记住,当Request传递给urlopen()(或OpenerDirector.open())时会添加一些标准头文件(Content-Length,Content-Type和Host).

  • @PiotrDobrogost,公平地说,这个特殊功能未被记录.[`OpenerDirector`](http://docs.python.org/release/2.6/library/urllib2.html#urllib2.OpenerDirector)类条目是裸的; 以上信息很容易错过. (6认同)

Cor*_*erg 17

headers = {'foo': 'bar',}
req = urllib2.Request(url, None, headers)
resp = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)

要么

req = urllib2.Request(url)
req.add_header('foo', 'bar')
resp = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)

  • `opener`是一个完全不同的对象,在这种情况下你不能使用`Request`. (2认同)