HTTPS POST 使用 python 请求查询 FastAPI

HTTPS POST to query FastAPI using python requests

我正在尝试使用 FastAPI 为神经网络提供服务。

from fastapi import Depends, FastAPI
from pydantic import BaseModel
from typing import Dict

class iRequest(BaseModel):
    arg1: str
    arg2: str

class iResponse(BaseModel):
    pred: str
    probs: Dict[str, float]

@app.post("/predict", response_model=iResponse)
def predict(request: iRequest, model: Model = Depends(get_model)):
    pred, probs = model.predict(request.arg1, request.arg2)
    return iResponse(pred = pred, probs = probs)

手册站点 http://localhost:8000/docs#/default/predict_predict_post 工作正常并转换为以下 curl 命令:

curl -X POST "http://localhost:8000/predict" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"arg1\":\"I am the King\",\"arg2\":\"You are not my King\"}"

这也有效。 当我尝试使用 python 请求查询 API 时:

import requests
data = {"arg1": "I am the King",
        "arg2": "You are not my King"}
r = requests.post("http://localhost:8000/predict", data=data)

我只收到“422 无法处理的实体”错误。我哪里错了?

您向 requests.post 提供了一个 data 参数,它用 Content-Type: application/x-www-form-urlencoded 执行 POST,而不是 JSON。

考虑使用 requests.post(url, json=data),你应该没问题。