我的应用程序经常将 URL 编码的字符串作为 URL 参数。通常这些字符串看起来像带有前导斜杠的路径。IE /file/foo。在 Flask 中,我有一个端点,它接受一个路径参数,我将 URL 编码的路径发送到该路径参数。所以我有一些看起来像这样的东西:
import flask
app = flask.Flask("Hello World")
@app.route("/blah/<path:argument>", methods=["GET"])
def foo(argument):
return "GOT: %s" % argument
if __name__ == "__main__":
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
如果我访问以下 URL,这会非常有效:
http://localhost:5000/blah/cats%2F
returns:
GOT: cats/
Run Code Online (Sandbox Code Playgroud)
但是以 %2F 开头的斜杠会失败,在 GET 情况下会出现 404 错误,在 POST 情况下会出现 405 错误。换句话说,这个 404:
http://localhost:5000/blah/%2Fcats
Run Code Online (Sandbox Code Playgroud)
在我对这个问题的研究中,我被引导相信URL编码足以解决这个问题。但事实似乎并非如此。
这是因为 Werkzeug 解析 url 的方式。它在解析路由之前对编码的斜杠进行解码,因此它们仍然显示为前导斜杠。有关于此的错误报告:
第二个链接提供了一个补丁来在路由后执行此解码,但它没有合并。
看来目前最好的解决方案是遵循Martijn 的回答here。
| 归档时间: |
|
| 查看次数: |
5686 次 |
| 最近记录: |