我想检测请求是来自localhost:5000
还是foo.herokuapp.com
主机以及请求的路径。如何获取有关Flask请求的此信息?
答案 0 :(得分:177)
您可以通过多个Request
fields检查网址:
用户请求以下网址:
http://www.example.com/myapplication/page.html?x=y
在这种情况下,上述属性的值如下:
path /page.html script_root /myapplication base_url http://www.example.com/myapplication/page.html url http://www.example.com/myapplication/page.html?x=y url_root http://www.example.com/myapplication/
您可以使用适当的拆分轻松提取主机部件。
答案 1 :(得分:82)
另一个例子:
请求:
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
答案 2 :(得分:8)
你应该尝试:
request.url
它假设总是工作,甚至在localhost上(只是在它上面)。
答案 3 :(得分:0)
如果您使用的是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')