如何在HTTP请求中使用urllib2发送自定义标题?

我想在使用urllib2.urlopen(..)时在我的请求中发送一个自定义的“Accept”头。 我怎么做?

不完全的。 创buildRequest对象实际上并不发送请求,Request对象没有Read()方法。 (另外: read()是小写的。)所有你需要做的就是把Request作为第一个parameter passing给urlopen() ,这会给你你的回应。

 import urllib2 request = urllib2.Request("http://www.google.com", headers={"Accept" : "text/html"}) contents = urllib2.urlopen(request).read() 

我通常使用:

 import urllib2 request_headers = { "Accept-Language": "en-US,en;q=0.5", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Referer": "http://thewebsite.com", "Connection": "keep-alive" } request = urllib2.Request("http://thewebsite.com", headers=request_headers) contents = urllib2.urlopen(request).read() print contents 

除了已经提到的其他解决scheme之外,您可以使用add_header方法。

所以提供的例子py @pantsgolem将是:

 import urllib2 request = urllib2.Request("http://www.google.com") request.add_header('Accept','text/html') ##Show the header having the key 'Accept' request.get_header('Accept') response = urllib2.urlopen(request) response.read()