8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

通过 POST 从 curl 发送 JSON 到 Python FastAPI

Chrysophylaxs 2月前

36 0

我正在运行以下脚本:从 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

帖子版权声明 1、本帖标题:通过 POST 从 curl 发送 JSON 到 Python FastAPI
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Chrysophylaxs在本站《json》版块原创发布, 转载请注明出处!
最新回复 (0)
  • curl --proxy \'\' -X \'POST\' \'localhost:5000\' -H \'accept: application/json\' -H \'Content-Type: application/json\' -d \'{\\'foo\\': \\'bar\\'}\' 终于做到了(在 Windows 上总是使用双引号,而且我目前在代理后面)。

  • 在 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
    
返回
作者最近主题: