196

我想检测请求是否来自localhost:5000foo.herokuapp.com主机以及请求的路径。如何获取有关 Flask 请求的信息?

4

4 回答 4

306

您可以通过几个Request字段检查 url:

假设您的应用程序正在侦听以下应用程序根目录:

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/

您可以使用适当的拆分轻松提取主机部分。

于 2013-04-12T15:16:00.310 回答
278

另一个例子:

要求:

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
于 2017-09-12T12:25:02.433 回答
11

你应该试试:

request.url 

它应该总是工作,即使在本地主机上(刚刚做到了)。

于 2016-04-04T12:56:46.357 回答
1

如果您使用的是 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')
于 2019-12-03T05:54:47.497 回答