我想检测请求是否来自localhost:5000或foo.herokuapp.com主机,以及请求的路径。如何获得关于Flask请求的信息?
localhost:5000
foo.herokuapp.com
你可以通过几个Request字段来检查url:
Request
假设您的应用程序正在侦听以下应用程序根: http://www.example.com/myapplication 用户请求以下URI: http://www.example.com/myapplication/foo/page.html?x=y 在这种情况下,上述属性的值将如下所示: path /foo/page.html full_path /foo/page.html?x=y script_root /myapplication base_url http://www.example.com/myapplication/foo/page.html url http://www.example.com/myapplication/foo/page.html?x=y url_root http://www.example.com/myapplication/
假设您的应用程序正在侦听以下应用程序根:
http://www.example.com/myapplication
用户请求以下URI:
http://www.example.com/myapplication/foo/page.html?x=y
在这种情况下,上述属性的值将如下所示:
path /foo/page.html full_path /foo/page.html?x=y script_root /myapplication base_url http://www.example.com/myapplication/foo/page.html url http://www.example.com/myapplication/foo/page.html?x=y url_root http://www.example.com/myapplication/
您可以使用适当的分割轻松地提取宿主部分。
使用这个的例子:
from flask import request @app.route('/') def index(): return request.base_url
你应该试试:
request.url
它应该总是工作,甚至在localhost(刚刚做了)。
另一个例子:
要求:
curl -XGET http://127.0.0.1:5000/alert/dingding/test?x=y
然后:
request.method: GET request.url: http://127.0.0.1:5000/alert/dingding/test?x=y request.base_url: http://127.0.0.1:5000/alert/dingding/test request.url_charset: utf-8 request.url_root: http://127.0.0.1:5000/ str(request.url_rule): /alert/dingding/test request.host_url: http://127.0.0.1:5000/ request.host: 127.0.0.1:5000 request.script_root: request.path: /alert/dingding/test request.full_path: /alert/dingding/test?x=y request.args: ImmutableMultiDict([('x', 'y')]) request.args.get('x'): y
如果你正在使用Python,我建议通过探索请求对象:
dir(request)
由于对象支持dict方法:
request.__dict__
它可以被打印或保存。我用它来记录Flask中的404代码:
@app.errorhandler(404) def not_found(e): with open("./404.csv", "a") as f: f.write(f'{datetime.datetime.now()},{request.__dict__}\n') return send_file('static/images/Darknet-404-Page-Concept.png', mimetype='image/png')