当前位置: 首页 > 知识库问答 >
问题:

Python:FastAPI错误422,发送JSON数据时POST请求

魏雅惠
2023-03-14

我正在构建一个简单的API来测试数据库。当我使用get请求时,一切正常,但如果我更改为post,我会收到“不可处理实体”错误:

以下是FastAPI代码:

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user

然后,我使用javascript的请求

let axios = require('axios')

data = { 
    user: 'smith' 
}

axios.post('http://localhost:8000', data)
    .then(response => (console.log(response.url)))

也使用Python

import requests

url = 'http://127.0.0.1:8000'
data = {'user': 'Smith'}

response = requests.post(url, json=data)
print(response.text)

我还尝试解析为 json,使用 utf-8 进行解析,并更改标头。没有什么对我有用。

共有3个答案

敖永丰
2023-03-14

如果您正在使用fetchAPI,但仍在获取422 Unprocessable Entity,请确保已设置Content-Type头:

fetch(someURL, {
  method: "POST",
  headers: {
    "Content-type": "application/json"
  },
  body
}).then(...)

这解决了我的问题。在服务器端,我使用Pydantic模型,所以如果您不使用这些模型,请参阅上面的答案。

东郭赞
2023-03-14

在我的例子中,我从不同的python项目调用python API,如下所示

queryResponse = requests.post(URL, data= query)

我在使用data属性,我将其更改为json,然后它对我有效

queryResponse = requests.post(URL, json = query)
太叔俊侠
2023-03-14

直接来自文档:

功能参数识别如下:

  • 如果参数也在路径中声明,它将用作路径参数。
  • 如果参数是奇异类型(如int、浮点数、str、bool等),它将被解释为查询参数。
  • 如果参数被声明为Pydant模型的类型,它将被解释为请求体。"

因此,要创建一个接收带有用户字段的主体的POSTendpoint,您需要执行以下操作:

from fastapi import FastAPI
from pydantic import BaseModel


app = FastAPI()


class Data(BaseModel):
    user: str


@app.post("/")
def main(data: Data):
    return data
 类似资料:
  • 问题内容: 我已经开发了一个Java代码,该代码使用URL和HttpUrlConnection将以下cURL转换为Java代码。卷曲是: 我已经编写了此代码,但是它始终会给HTTP代码400错误的请求。我找不到丢失的内容。 问题答案: 你的JSON不正确。代替 写 因此,JSONObject.toString()应该只为外部对象调用一次。 另一件事(可能不是你的问题,但我想提一下): 为确保不会遇

  • 我已经写了这段代码,但它总是给HTTP代码400错误的请求。我找不到丢失的东西。

  • 问题内容: 我正在尝试将一个对象作为JSON发送到Flask中的Web服务,该对象期望请求数据中包含JSON。 我已经通过发送JSON数据手动测试了该服务,并且工作正常。但是,当我尝试通过角度控制器发出http POST请求时,Web服务器向我发送一条消息,说它未接收到JSON。 当我检查Chrome中的请求标头时,似乎不是以JSON格式发送数据,而是通过内容类型将常规键/值对设置为applica

  • 我在Excel中的VBA宏中使用了以下代码: 在即时窗口中,我收到了以下错误: 400 Apache Tomcat/8.0.28-错误报告1{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}H2{font-family:Tahoma,Arial,sans-serif;颜

  • axios请求点击控制器上的url,但将空值设置到POJO类中,当我使用chrome中的开发人员工具时,有效负载包含数据。我做错了什么? Axios POST请求: 浏览器响应: 过帐多部分/表单数据时出错。Content-Type标头缺少边界 谁能解释一下如何设置边界或者我如何使用Axios发送表单数据。

  • 问题内容: 我正在使用下面的代码发送http POST请求,该请求将对象发送到WCF服务。可以,但是如果我的WCF服务还需要其他参数怎么办?如何从Android客户端发送它们? 这是我到目前为止编写的代码: 问题答案: 使用POST发布参数: 你错过的部分在以下内容中,即如下。 其余的事情你都可以做到。