我正在看官方的 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
请求中还需要哪些内容?
1条答案
按热度按时间vmjh9lq91#
我也从官方文档中的POST和PUT请求的例子中得到了同样的错误。我认为这是
curl
的问题,因为当我尝试使用Postman Desktop App时,我可以成功地进行POST和PUT请求。据我所知,curl
不能正确解释Content-Type
,从而导致了这个错误。我对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
TODOS
。(即使使用curl
也可以这样做)GET request: Postman Preview
对于PUT请求,您可以再次在 Postman 上用新值
{"task": "Do mytask"}
对http://localhost:5000/todos/todo2
执行PUT,并将用新值更新"todo2"
。我正在使用
flask 2.2.2
、werkzeug 2.2.2
、flask-restful 0.3.9
和Python 3.9.13