2015-01-20 110 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的好處之一是,你可以始終遵循事物通過源代碼。

相關問題