【发布时间】:2015-06-05 21:01:22
【问题描述】:
我是 python 新手,使用 Python Flask 并生成 REST API 服务。
我想检查发送给客户端的授权标头。
但我找不到在烧瓶中获取 HTTP 标头的方法。
感谢任何有关获得 HTTP 标头授权的帮助。
【问题讨论】:
标签: python http flask http-headers authorization
我是 python 新手,使用 Python Flask 并生成 REST API 服务。
我想检查发送给客户端的授权标头。
但我找不到在烧瓶中获取 HTTP 标头的方法。
感谢任何有关获得 HTTP 标头授权的帮助。
【问题讨论】:
标签: python http flask http-headers authorization
from flask import request
request.headers.get('your-header-name')
request.headers 的行为类似于字典,因此您也可以像使用任何字典一样获取标题:
request.headers['your-header-name']
【讨论】:
request.authorization.username 或 request.authorization.password。
if hasattr(request, 'authorization'): 将有助于检查请求中是否缺少“授权”属性。
请注意,方法之间的不同是,如果标头不存在
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']
....
【讨论】:
如果有人试图获取所有通过的标头,那么只需使用:
dict(request.headers)
它为您提供 dict 中的所有标题,您可以从中实际执行任何您想做的操作。在我的用例中,我不得不将所有标头转发到另一个 API,因为 python API 是一个代理
【讨论】:
request.headers 实际上是一个EnvironHeaders 对象,可以像字典一样访问。 werkzeug.palletsprojects.com/en/1.0.x/datastructures/…
EnvironHeaders 不是dict 的子类,所以它会失败很多次,而dict 会成功(isinstance(flask.request.headers, dict) == False)。例如,以下代码会产生错误:print(json.dumps(flask.request.headers, indent=4))。修复是print(json.dumps(dict(flask.request.headers), indent=4))。
request.headers 的类型为dict,因为它可以像dict 一样被访问/查询。您看到的评论是对此的回应。
让我们看看我们如何在 Flask 中获取参数、标题和正文。 我会在邮递员的帮助下解释。
参数键和值反映在 API 端点中。
例如端点中的 key1 和 key2 :
https://127.0.0.1/upload?key1=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
在params之后,我们现在看看如何获取headers:
header_1 = request.headers.get('header1')
header_2 = request.headers.get('header2')
print(header_1)
#--> header_value1
print(header_2)
#--> header_value2
现在让我们看看如何获取body
file_name = request.files['file'].filename
ref_id = request.form['referenceId']
print(ref_id)
#--> WWB9838yb3r47484
所以我们使用 request.files 获取上传的文件并使用 request.form 获取文本
【讨论】: