CURL POST请求传递JSON请求体失败,疑似命令语法错误
修正你的curl POST请求问题
我帮你排查了这条curl命令,确实有几个小细节出错了,导致请求体无法正确传递,咱们来一步步修正:
问题点分析
- 缺少请求体参数:POST请求需要用
-d(或--data)参数来指定要发送的请求体内容,你现在直接把JSON写在POST后面,curl会误认为这是目标URL的一部分,根本不会把它当成请求体发送。 - JSON语法错误:你写的
"unread:\" \"true"是错误的——转义引号的位置不对,正确的键值对应该是"unread": "true",冒号要放在键名的引号外面。 - 不必要的转义麻烦:用双引号包裹JSON时,内部的双引号都需要转义,很容易写错,换成单引号包裹JSON会更省心,不用处理转义。
修正后的命令(推荐写法)
这种写法用单引号包裹JSON,避免转义错误,同时加上了-d参数:
curl -H "Content-Type: application/json" -X POST -d '{"time": "2019-12-27T09:50:02.000+0000", "unread": "true", "message": "hello", "from":"Vadim"}' localhost:8080/api/save
备选写法(保留双引号转义)
如果因为某些场景必须用双引号包裹(比如需要在JSON里引用shell变量),只要修正转义和加上-d参数即可:
curl -H "Content-Type: application/json" -X POST -d "{\"time\": \"2019-12-27T09:50:02.000+0000\", \"unread\": \"true\", \"message\": \"hello\",\"from\":\"Vadim\"}" localhost:8080/api/save
额外小技巧
如果JSON内容比较复杂,推荐把它写到单独的文件里(比如request.json),然后用以下命令发送,这样更不容易出错:
curl -H "Content-Type: application/json" -X POST -d @request.json localhost:8080/api/save
内容的提问来源于stack exchange,提问作者damagedd
相关产品推荐
相关产品推荐

