2016-03-08 93 views
1

我正在將舊系統重新實現爲燒瓶應用程序,並且必須保持網址模式不變。其中一個網址直接包含用戶的完整電子郵件地址(換句話說,電子郵件地址是url的一部分,而不是GET參數)。燒瓶重定向請求到包含'@'的網址

當我向這個URL發送請求時,除了電子郵件地址中的'@'符號替換爲'%40'之外,Flask會自動響應重定向到相同的URL。例如,對/users/new/[email protected]/的請求被重定向到/users/new/user%40example.com/。當我直接向第二個URL發送POST請求時,我甚至會收到來自Flask的響應,所以我假設在處理請求時'%40'會自動轉換爲'@'字符。

如何讓Flask接受包含'@'符號而不重定向的請求?這可能是Werkzeug的錯,因爲Flask的URL解析系統建立在Werkzeug上。

編輯:我錯誤地在此問題中列出的初始請求URL中包含一個結尾的斜槓。我的問題實際上是由於沒有斜線造成的,而不是用'%40'代替'@'。

+0

你可以更新你的POST網址,以便它使用'%40'而不是文字'@',並避免往返?或者你在乎的是地址欄中的一個不錯的網址? 文字'@'[合法](http://stackoverflow.com/a/19737890/223424),但在URL的域/路徑部分仍然有點奇怪;可能Flask在更換它時反應過度。 – 9000

+0

如上所述,我嘗試將'@'替換爲'%',但Flask仍然將請求看作是使用'@'符號發佈的。我同意將一個電子郵件地址作爲URL路徑的一部分是很奇怪的,但我沒有權利改變這種情況(許多客戶端已經在使用該端點,因此使這種更改可能會破壞向後兼容性)。 – Adam

回答

0

事實證明9000是正確的:'@'符號在URL中是完全合法的字符。因此,這不應該是Flask所抱怨的。比重定向URL中'@'轉換爲'%40'更不明顯的是最初請求中沒有結尾的斜線。在寫我的問題的時候,我非常關注從'@'到'%40'的變化(事實證明,在URL中同樣的事情),我沒有注意到末尾丟失的尾部斜線的第一個URL,並在寫這個問題時誤將它包含在內。

將追蹤斜線添加到POST URL,無論該URL是否包含「@」或「%40」,都修復了問題。如果Flask在重定向時將'@'替換爲'%40',那沒什麼可擔心的。真正的問題可能完全是由其他問題引起的。