gpt4 book ai didi

Python Flask -- URL 编码的前导斜杠导致 404 或 405

转载 作者:行者123 更新时间:2023-12-03 16:06:07 25 4
gpt4 key购买 nike

我的应用程序经常将 URL 编码的字符串作为 URL 参数。通常,这些字符串看起来像带有前导斜杠的路径。浏览器 /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)

如果我访问这个 URL,这很有效:
http://localhost:5000/blah/cats%2F

returns:

GOT: cats/

但是带有 %2F 的前导斜杠在 GET 的情况下失败,为 404,在 POST 的情况下为 405。换句话说,这个 404s:
http://localhost:5000/blah/%2Fcats

在我对这个问题的研究中,我相信 here URL 编码足以解决问题。然而,情况似乎并非如此。

最佳答案

在不定义自己的 PathConverter 的情况下解决此问题的一种方法是使用两个路由过滤器:

import flask
app = flask.Flask("Hello World")

@app.route("/blah/<path:argument>", methods=["GET"])
@app.route("/blah//<path:argument>", methods=["GET"])
def foo(argument):
return "GOT: %s" % argument

if __name__ == "__main__":
app.run(debug=True)

击中这个:
http://localhost:5000/blah/%2Fcats

给我:
GOT: cats

与:
http://localhost:5000/blah//cats

给我:
GOT: cats

但是更好(更干净)的解决方案可能是这个 SO 答案中描述的解决方案: Flask route using path with leading slash

关于Python Flask -- URL 编码的前导斜杠导致 404 或 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com