2015-01-20 30 views
3

我看到Flask在Request中提供了一些parsed fields,但是url在删除转义之后。在Flask完成解除转义之前访问url的任何方法?在Python Flask中,如何在un-escaping之前访问完整的原始URL

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

+2

请添加一个你期望得到的和你实际得到的东西的例子。 – davidism 2015-01-20 23:18:42

+0

我不认为有一种方法可以在不手动编码request.url的情况下完成此操作。它看起来像werkzeug丢弃原始网址编码。对我来说,这个问题是客户在HMAC签名中使用路径和查询字符串值的主要问题。 – Boris 2015-09-04 17:45:33

回答

0

你的意思是%XX逃脱?

from urllib.parse import quote 

quote(url) 
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' 
... 
""" 

一个约烧瓶和WERKZEUG的好处之一是,你可以始终遵循事物通过源代码。

相关问题