如何在请求中添加标头

use*_*649 6 python python-requests

是否有任何其他优雅的方式为请求添加标头:

import requests

requests.get(url,headers={'Authorization', 'GoogleLogin auth=%s' % authorization_token}) 
Run Code Online (Sandbox Code Playgroud)

不起作用,而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()
Run Code Online (Sandbox Code Playgroud)

Rah*_*pta 6

您可以通过将字典作为参数传递来添加标头.

这应该工作:

requests.get(url,headers={'Authorization': 'GoogleLogin auth=%s' % authorization_token}) 
Run Code Online (Sandbox Code Playgroud)

为什么你的代码不起作用?

没有将字典传递给headers参数.您正在根据add_header()函数中定义的格式传递值.

根据文档,

requests.get(url,params = None,headers = None,cookies = None,auth = None,timeout = None)

headers - (可选)要与请求一起发送的HTTP标头字典.

为什么request.add_header()有效?

您使用request.add_header()工作添加标头的方式是因为函数在urllib2模块中定义.

Request.add_header(key, val)
Run Code Online (Sandbox Code Playgroud)

它接受两个论点 -

  1. 标题名称(前面定义的dict的键)
  2. 标头值(前面定义的字典中相应键的值)


pan*_*kes 3

您可以通过headers关键字传递字典。这在 Python 中非常优雅:-)

 headers = {
     "header_name": "header_value",
 }

 requests.get(url, headers=headers)
Run Code Online (Sandbox Code Playgroud)