python-3.x flask 安静放置和张贴:未尝试加载JSON数据,因为请求内容类型不是“application/json”

flseospp  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(1080)

我正在看官方的 flask 休息文件,不能让他们的把和后的要求工作。
https://flask-restful.readthedocs.io/en/latest/quickstart.html#full-example
我使用的是Python 3.8、Flask 2.2.2和Flask-RESTful 0.3.9。
为了测试,我们发送curl请求。get和delete可以工作,但post:

curl http://localhost:5000/todos -d "task=something new" -X POST -v

* Connected to localhost (127.0.0.1) port 5000 (#0)
> POST /todos HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.83.1
> Accept: */*
> Content-Length: 18
> Content-Type: application/x-www-form-urlencoded
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 BAD REQUEST
< Server: Werkzeug/2.2.2 Python/3.8.1
< Date: Wed, 05 Oct 2022 18:04:54 GMT
< Content-Type: application/json
< Content-Length: 116
< Connection: close
<
{
    "message": "Did not attempt to load JSON data because the request Content-Type was not 'application/json'."
}
* Closing connection 0

我认为问题是由于我发送application/x-www-form-urlencoded引起的。所以我需要发送json格式,对吗?我尝试了这个,但是得到了同样的错误:

curl -X POST http://localhost:5000/todos -H 'Content-Type: application/json' -d '{"task":"something different"}'

{
    "message": "Did not attempt to load JSON data because the request Content-Type was not 'application/json'."
}
curl: (6) Could not resolve host: application

请求中还需要哪些内容?

vmjh9lq9

vmjh9lq91#

我也从官方文档中的POST和PUT请求的例子中得到了同样的错误。我认为这是curl的问题,因为当我尝试使用Postman Desktop App时,我可以成功地进行POST和PUT请求。据我所知,curl不能正确解释Content-Type,从而导致了这个错误。
我对Postman的解决方案如下:

  • 安装Postman后,在新的collections中,创建一个新的request,并在其中添加一个名为Content-Type的新键,在Headers下的值为application/json
  • 现在使用raw JSON以{"task": "Do that task2"}http://localhost:5000/todos发出POST请求

POST request: Postman Preview

  • 这将在TODOS字典中添加新的todoX,新的todoX具有新的编号X
  • 在GET请求时,您可以看到更新的TODOS。(即使使用curl也可以这样做)

GET request: Postman Preview
对于PUT请求,您可以再次在 Postman 上用新值{"task": "Do mytask"}http://localhost:5000/todos/todo2执行PUT,并将用新值更新"todo2"
我正在使用flask 2.2.2werkzeug 2.2.2flask-restful 0.3.9Python 3.9.13

相关问题