【问题标题】:Flask redirecting requests to urls containing '@'Flask 将请求重定向到包含“@”的 url
【发布时间】:2016-06-22 23:40:06
【问题描述】:

我正在将旧系统重新实现为 Flask 应用程序,并且必须保持 url 模式不变。其中一个 url 直接包含用户的完整电子邮件地址(换句话说,电子邮件地址是 url 的一部分,而不是作为 GET 参数)。

当我向这个 url 发送请求时,Flask 会自动响应重定向到相同的 url,除了电子邮件地址中的“@”符号被替换为“%40”。例如,对/users/new/user@example.com/ 的请求被重定向到/users/new/user%40example.com/。当我将 POST 请求直接发送到第二个 url 时,我什至收到了来自 Flask 的响应,所以我假设在处理请求时“%40”会自动转换为“@”字符。

如何让 Flask 接受对包含“@”符号的 url 的请求而不重定向?这可能是 Werkzeug 的错,因为 Flask 的 URL 解析系统是建立在 Werkzeug 之上的。

编辑:我在此问题中列出的初始请求 URL 中错误地包含了斜杠。我的问题实际上是由于没有斜线引起的,而不是用 '%40' 替换 '@'。

【问题讨论】:

  • 您能否更新您的 POST 网址,使其使用 %40 而不是文字 @,并避免往返?或者您关心的是地址行中的一个不错的 URL?一个文字@is legit,但在URL的域/路径部分仍然有点奇怪;可能 Flask 在替换它时反应过度。
  • 我已尝试将 '@' 替换为 '%40' 的 URL 进行 POST,如上所述,但 Flask 仍将请求视为使用 '@' 符号发布。我同意将电子邮件地址作为 URL 路径的一部分很奇怪,但我无权更改它(许多客户端已经使用该端点,因此进行更改可能会破坏向后兼容性)。跨度>

标签: python flask url-routing werkzeug


【解决方案1】:

事实证明 9000 是正确的:“@”符号是 URL 中完全合法的字符。因此,这不应该是 Flask 所抱怨的。与重定向 URL 中将“@”转换为“%40”相比,初始请求中缺少尾部斜杠这一点要明显得多。在写我的问题时,我非常专注于从 '@' 到 '%40' 的变化(事实证明,这在 URL 术语中是一样的),以至于我没有注意到末尾缺少的斜杠的第一个 URL 并在写这个问题时错误地包含它。

无论该 URL 是否包含“@”或“%40”,将尾部斜杠添加到 POST URL 都解决了该问题。如果 Flask 在重定向时将 '@' 替换为 '%40',则无需担心。真正的问题很可能完全是由其他原因引起的。

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多