【问题标题】:How to add header in requests如何在请求中添加标头
【发布时间】:2015-08-30 04:52:21
【问题描述】:
有没有其他优雅的方式来向请求中添加标头:
import requests
requests.get(url,headers={'Authorization', 'GoogleLogin auth=%s' % authorization_token})
不起作用,而 urllib2 起作用了:
import urllib2
request = urllib2.Request('http://maps.google.com/maps/feeds/maps/default/full')
request.add_header('Authorization', 'GoogleLogin auth=%s' % authorization_token)
urllib2.urlopen(request).read()
【问题讨论】:
标签:
python
python-requests
【解决方案1】:
您可以通过将字典作为参数传递来添加标题。
这应该可行:
requests.get(url,headers={'Authorization': 'GoogleLogin auth=%s' % authorization_token})
为什么您的代码不起作用?
您没有将字典传递给 headers 参数。您正在根据add_header() 函数中定义的格式传递值。
根据文档,
requests.get(url, params=None, headers=None, cookies=None, auth=None,
超时=无)
headers - (可选)要发送的 HTTP 标头字典
请求。
为什么 request.add_header() 有效?
您使用request.add_header()添加标头的方式有效,因为该函数在urllib2模块中定义。
Request.add_header(key, val)
它接受两个参数 -
- 标题名称(前面定义的dict键)
- header值(前面定义的dict中对应key的值)
【解决方案2】:
标题应该是一个字典,因此这应该可以工作
headers= {}
headers['Authorization']= 'GoogleLogin auth=%s' % authorization_token
requests.get(url, headers=headers)
【解决方案3】:
您可以使用以下格式向请求请求添加自定义标头,该格式使用 Python 字典,语法中带有冒号 :。
r = requests.get(url, headers={'Authorization': 'GoogleLogin auth=%s' % authorization_token})
Requests documentation for custom headers 中介绍如下:
>>> url = 'https://api.github.com/some/endpoint'
>>> headers = {'user-agent': 'my-app/0.0.1'}
>>> r = requests.get(url, headers=headers)
【解决方案4】:
您可以通过headers 关键字传递字典。这在 Python 中非常优雅:-)
headers = {
"header_name": "header_value",
}
requests.get(url, headers=headers)