如果我向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的方式不正确?
答案 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?