我正在运行以下脚本:从 fastapi 导入 FastAPI从 fastapi 导入 Requestimport osimport uvicornapp = FastAPI()@app.post(\'/\')async def root(data: Request): try:...
我正在运行以下脚本:
from fastapi import FastAPI
from fastapi import Request
import os
import uvicorn
app = FastAPI()
@app.post("/")
async def root(data: Request):
try:
res = await data.json()
except Exception as ex:
res = str(ex)
return res
if __name__ == "__main__":
prog = os.path.basename(__file__).replace(".py","")
uvicorn.run("%s:app" % prog, host="127.0.0.1", port=5000, log_level="debug",reload=True)
并尝试使用以下 cURL 命令进行测试:
curl -d '{"text":"Foo Bar"}' -H "Content-Type: application/json" -X POST http://localhost:5000
我得到的总是:
"Expecting value: line 1 column 1 (char 0)"
这里有什么问题?
Windows 11,Python 3.9.9
在 Windows 上,使用单引号 data
(以及一般情况下)不起作用,因此您需要转义双引号。例如( port
根据需要调整数字):
curl -X "POST" \
"http://127.0.0.1:8000/" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d "{\"foo\": \"bar\"}"
^ ^^ ^^ ^^ ^^ ^
以上内容仅一行:
curl -X "POST" "http://127.0.0.1:8000/" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"foo\": \"bar\"}"
请注意,您还可以使用 Swagger UI 提供的 交互式 API 文档 /docs
该文档允许您直接从浏览器测试 API,并在提交数据后为您提供 curl 命令,您可以自行复制和测试该命令。为了让 Swagger UI 为您提供请求正文区域(您可以在其中键入要发送的数据),您需要在端点中定义一个 body 参数。由于您似乎正在发送任意 JSON 数据,因此可以使用以下内容(请查看 此答案 和 此答案 以获取有关如何将 JSON 数据发送到 FastAPI 后端的更多详细信息)。示例:
from typing import Dict, Any
@app.post('/')
def main(payload: Dict[Any, Any]):
return payload