如何在FastAPI的GET端点中传递URL作为参数?
解决FastAPI路径参数含斜杠导致的404问题
问题根源在于FastAPI默认将路径中的/视为路由分隔符,即使传递编码后的%2F,服务器解码后仍会把它当作路径分隔符,导致路由匹配失败返回404。
以下是两种可行的解决方案:
方案一:使用路径转换器path
修改路由定义,给参数添加path转换器,允许参数包含斜杠:
@app.get("/Datos/{CI:path}") async def read_CI(CI: str): return {"CI_Datos": CI}
调用时需要将目标URL完整编码后传递,示例curl命令:
# 传递编码后的目标URL curl -X GET 'http://127.0.0.1:8000/Datos/https%3A%2F%2Fstore.epicgames.com%2Fes-ES%2Fp%2Fdead-island-2--gold-edition' -H 'accept: application/json' # 或让curl自动编码参数 curl -G 'http://127.0.0.1:8000/Datos/' --data-urlencode 'CI=https://store.epicgames.com/es-ES/p/dead-island-2--gold-edition' -H 'accept: application/json'
方案二:改用查询参数传递URL
将URL作为查询参数传入,避免路径分隔符的冲突:
修改路由为:
@app.get("/Datos/") async def read_CI(CI: str): return {"CI_Datos": CI}
对应的curl命令:
curl -X GET 'http://127.0.0.1:8000/Datos/?CI=https://store.epicgames.com/es-ES/p/dead-island-2--gold-edition' -H 'accept: application/json'
两种方案对比
- 路径转换器:保持API的路径式风格,但需要客户端正确编码特殊字符。
- 查询参数:实现更简单,无需复杂编码,适合参数本身是URL这类含大量特殊字符的场景。
内容的提问来源于stack exchange,提问作者elaadani
相关产品推荐
相关产品推荐

