如何在Flask中获取HTTP标头?


Answers:


297
from flask import request
request.headers.get('your-header-name')

request.headers 行为就像字典,因此您也可以像使用任何字典一样获取标头:

request.headers['your-header-name']

1
感谢您的快速帮助@sanyi
emil,

9
仅供参考:我正在查看flask.pocoo.org/snippets/8,看来您还可以访问用户名和密码以进行基本身份验证,例如:request.authorization.usernamerequest.authorization.password
Karthic Raghupathi 2015年

1
@Karthic Raghupathi,只要标头没有破折号之类的非法字符(大多数标头都具有破折号,即X-Api-Key),在这种情况下,您需要像带键的字典一样访问它。
布莱尔23年

1
@Abhijeet:...或者您可以只使用我在先前评论中建议的代码。干净得多。
Michael Scheper'5

5
Flask标头不是字典,是吗?...我在测试中看到它们以werkzeug.datastructures.EnvironHeaders的形式返回。 werkzeug.pocoo.org/docs/0.14/datastructures/…–
Pandem1c

15

请注意,如果标头不存在,则方法之间的区别是

request.headers.get('your-header-name')

将返回None或没有异常,因此您可以像使用它

if request.headers.get('your-header-name'):
    ....

但是以下内容将引发错误

if request.headers['your-header-name'] # KeyError: 'your-header-name'
    ....

你可以通过

if 'your-header-name' in request.headers:
   customHeader = request.headers['your-header-name']
   ....

13

如果有人试图获取所有已传递的标头,则只需使用:

dict(request.headers)

它为您提供了dict中的所有标头,您实际上可以从中执行任何想要的操作。在我的用例中,由于python API是代理,因此我不得不将所有标头转发到另一个API


2
@JamieLindsey这是不正确的。 request.headers实际上EnvironHeaders是可以像字典一样访问的对象。 werkzeug.palletsprojects.com/en/1.0.x/datastructures/...
jasonrhaas

2

让我们看看如何在Flask中获取参数,标题和正文。我要在邮递员的帮助下进行解释。

在此处输入图片说明

参数项和值反映在API端点中。例如端点中的key1和key2:https : //127.0.0.1/uploadkey1 = value1&key2 = value2

from flask import Flask, request
app = Flask(__name__)

@app.route('/upload')
def upload():

  key_1 = request.args.get('key1')
  key_2 = request.args.get('key2')
  print(key_1)
  #--> value1
  print(key_2)
  #--> value2

在参数之后,让我们看看如何获​​取标题

在此处输入图片说明

  header_1 = request.headers.get('header1')
  header_2 = request.headers.get('header2')
  print(header_1)
  #--> header_value1
  print(header_2)
  #--> header_value2

现在让我们看看如何获​​得身体

在此处输入图片说明

  file_name = request.files['file'].filename
  ref_id = request.form['referenceId']
  print(ref_id)
  #--> WWB9838yb3r47484

因此我们使用request.files获取上传的文件,并使用request.form获取文本

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.