You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI POST请求报错:Input should be a valid dictionary or object

问题分析与解决

错误原因

  1. 请求格式不匹配:你用curl -d发送的是表单格式数据,但FastAPI默认期望JSON格式的请求体,未指定Content-Type头导致解析失败。
  2. 代码拼写错误:函数返回的promt是拼写错误,正确应为prompt。
  3. 参数声明问题:prompt: Prompt = None的写法可能让FastAPI对请求体的解析逻辑混乱,建议明确参数类型。

修正后的代码

from pydantic import BaseModel
from fastapi import FastAPI
from typing import Optional  # 可选,用于允许请求体为空

app = FastAPI()

class Prompt(BaseModel):
    content: str = ""

@app.post("/query")
def query_item(prompt: Prompt):  # 去掉默认None,明确为必填请求体
    return prompt  # 修正拼写错误

如果需要允许请求体可选(即可以不传),可调整为:

@app.post("/query")
def query_item(prompt: Optional[Prompt] = None):
    return prompt

正确的curl请求命令

添加-H "Content-Type: application/json"指定请求格式:

curl -X POST "http://localhost:8000/query" -H "Content-Type: application/json" -d '{"content":"Hello"}'

requests包的正确调用示例

import requests

url = "http://localhost:8000/query"
data = {"content": "Hello"}
response = requests.post(url, json=data)  # 使用json参数自动设置Content-Type并序列化数据
print(response.json())

内容的提问来源于stack exchange,提问作者Hanchen Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:41:07