使用curl命令时,http POST resquest的数据格式

时间:2017-08-04 08:23:30

标签: http curl post get

如果我向curl api发出REST命令,那么我会得到以下回复。

curl -i http://10.4.0.22:8088/api/clients/TEST_1/8194/1/1

响应:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 51
Server: Jetty(9.1.z-SNAPSHOT)

{"status":"CONTENT","content":{"id":1,"value":"0"}}

我的理解是这等同于http GET请求。

我尝试做的是更新value字段并将值更改为1

我认为这需要使用POST标记的-d请求。

我的问题是如何知道curl命令中数据的格式?

我试过

curl -d "{"status":"CONTENT","content":{"id":1,"value":"1"}}" http://10.4.0.22:8088/api/clients/EST_1/8194/1/1

但我得到了这个回复。

{"status":"METHOD_NOT_ALLOWED"}

我认为我在te -d标志后指定json的方式不正确?

1 个答案:

答案 0 :(得分:0)

响应METHOD_NOT_ALLOWED表示服务器不允许 POST 方法。

您可以添加 -v 来获取响应的详细输出。有时,服务器会在消息中回复它允许的 HTTP Methods (或 Verbs )。

我在我的应用程序端点上尝试了你的参数并且它工作正常。见下文

curl -d "{"status":"CONTENT","content":{"id":1,"value":"1"}}" http://sitename.azurewebsites.net/index.php -v
* Adding handle: conn: 0x2c257d0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x2c257d0) send_pipe: 1, recv_pipe: 0
* About to connect() to sitename.azurewebsites.net port 80 (#0)
*   Trying 104.211.224.252...
* Connected to sitename.azurewebsites.net (104.211.224.252) port 80 (#0)
> POST /index.php HTTP/1.1
> User-Agent: curl/7.33.0
> Host: sitename.azurewebsites.net
> Accept: */*
> Content-Length: 39
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 39 out of 39 bytes
< HTTP/1.1 200 OK
< Content-Length: 0
< Content-Type: text/html
< X-Powered-By: PHP/5.4.45
< Date: Fri, 04 Aug 2017 14:24:08 GMT

您还可以尝试在请求中指定 Content-Type 标头,并将其设置为相应的 Mime 值。

对于CURL,您可以使用-H并将值设置为"Content-Type: application/json"

你见过这个帖子:How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?