在Python Flask中,如何在取消转义之前访问完整的原始URL

时间:2015-01-20 23:14:22

标签: python flask werkzeug

我看到Flask在Request中提供了一些parsed fields,但是url是在删除转义之后。在Flask完成取消转义之前,有什么办法可以访问网址吗?

例如,当其他客户端请求" http://www.example.com/my_url%20is%20here?arg1=2&?arg2=3"时,Flask会向我提供" http://www.example.com/my_url的request.base_url"其中%20被替换为空格。我可以自己引用这个来获取原始URL作为有人回复,但最好是我想访问客户端发送的原始URL而不是派生它。

2 个答案:

答案 0 :(得分:3)

字段不是URLs, or even URIs,而是IRI。使用iri_to_uri

from werkzeug.urls import iri_to_uri
iri_to_uri(request.url)

来自werkzeug/wrappers.py

"""
...
Note that the string returned might contain unicode characters as the
representation is an IRI not an URI.  If you need an ASCII only
representation you can use the :func:`~werkzeug.urls.iri_to_uri`
function:
>>> from werkzeug.urls import iri_to_uri
>>> iri_to_uri(get_current_url(env))
'http://localhost/script/?param=foo'
...
"""

关于flask和werkzeug的一个好处是你可以随时在源代码中跟进。

答案 1 :(得分:0)

你的意思是%XX逃脱?

from urllib.parse import quote

quote(url)