Python 如何获取烧瓶请求的不同部分';谁的网址?

Python 如何获取烧瓶请求的不同部分';谁的网址?,python,url,flask,Python,Url,Flask,我想检测请求是否来自localhost:5000或foo.herokuapp.com主机,以及请求的路径。如何获取有关烧瓶请求的此信息?您可以通过几个字段检查url: 假设您的应用程序正在侦听以下应用程序根目录: http://www.example.com/myapplication 并且用户请求以下URI: http://www.example.com/myapplication/foo/page.html?x=y 在这种情况下,上述属性的值如下所示: path

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

您可以通过几个字段检查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/
您可以使用适当的拆分轻松提取主机部件。

您应该尝试:

request.url 
即使在本地主机上,它也会一直工作(只是这样做了)。

另一个例子:

请求:

curl -XGET http://127.0.0.1:5000/alert/dingding/test?x=y
然后:


如果您使用的是Python,我建议您研究一下请求对象:

dir(请求)

由于对象支持方法dict

request.\uuuu dict\uuuuu

它可以打印或保存。我使用它在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')

我正在尝试获取
请求。root\u url
作为返回,我只得到
,而不是格式良好的
http://www.example.com/myapplication/
。或者此功能在localhost上不起作用?@Vadim您应该使用request.root\u url,而不是request.root\u url。对于Flask来说,我不知道请求对象来自何处以及如何工作,这里是:request.url\u root对我有效,而request.root\u url和request.root\u url失败。因此,注意cap'R'和url\u root与root\u urlurl\u root的返回值
http://www.example.com/
http://www.example.com/myapplication/
base\u url返回
http://www.example.com/myapplication/
这应该是公认的答案,因为它有更多的细节。这是一个很好的答案。非常有用且完整。对于希望使用
request.full\u path
的用户,建议改用
request.environ['RAW\u URI']
。因为,当实际完整查询路径为
/alert/dingding/test
时,
request.full\u path
返回
/alert/dingding/test?
,结果中将添加一个额外的问号,这可能是不可取的。
@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')