如何使用python的urllib设置标头?


78

我对python的urllib很陌生。我需要做的是为发送到服务器的请求设置自定义标头。具体来说,我需要设置Content-type和Authorizations标头。我已经研究了python文档,但是找不到。

Answers:


93

使用urllib2添加HTTP标

从文档:

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
resp = urllib2.urlopen(req)
content = resp.read()

88

对于Python 3和Python 2,这都有效:

try:
    from urllib.request import Request, urlopen  # Python 3
except ImportError:
    from urllib2 import Request, urlopen  # Python 2

req = Request('http://api.company.com/items/details?country=US&language=en')
req.add_header('apikey', 'xxx')
content = urlopen(req).read()

print(content)

我们可以对请求q.add_header('apikey','xxx')做同样的事情吗
user3378649 2015年

@ user3378649是什么意思?
Cees Timmerman 2015年

2
@ user3378649可能是你指使用requestsPython包的自定义页眉
WeizhongTu

1
这个答案-是一千次(谢谢!)。数小时以来,我一直在努力寻找python 2和3(在urllib,urllib2和urllib3之间)的通用接口。
Beorn Harris

18

使用urllib2并创建一个Request对象,然后将其交给urlopen。 http://docs.python.org/library/urllib2.html

我真的不再使用“旧的” urllib。

req = urllib2.Request("http://google.com", None, {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'})
response = urllib2.urlopen(req).read()

未经测试...


2

对于多个标头,请执行以下操作:

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('param1', '212212')
req.add_header('param2', '12345678')
req.add_header('other_param1', 'sample')
req.add_header('other_param2', 'sample1111')
req.add_header('and_any_other_parame', 'testttt')
resp = urllib2.urlopen(req)
content = resp.read()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.