我可以这样做:
$ curl -f -X GET -H X-Auth-Token:swordfish \
http://deployer.corpwad.net/api/sites/commit?path=lows&revision=4550
site update
然而,当我使用--data
参数正确 时
$ curl -f -X GET -H X-Auth-Token:swordfish \
--data path=lows \
http://deployer.corpwad.net/api/sites/commit?revision=4550
site not found
当我使用详细输出时,我看到了:
* About to connect() to deployer.corpwad.net port 80
* Trying XX.XX.XX.XX... connected
* Connected to deployer.corpwad.net (XX.XX.XX.XX) port 80
> GET /api/sites/commit?revision=3976 HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: deployer.corpwad.net
> Accept: */*
> X-Auth-Token:swordfish
> Content-Length: 9
> Content-Type: application/x-www-form-urlencoded
>
> path=lowsHTTP/1.1 200 OK
< Date: Fri, 22 Aug 2014 14:11:10 GMT
< Server: Apache
< X-Powered-By: PHP/5.3.3
< Cache-Control: no-cache, max-age=0, public
< X-Frame-Options: SAMEORIGIN
我认为HTTP/1.1 200 OK
未添加到我的数据中,而是从服务器发回。当我将path=lows
追加到我的数据末尾时,不会发送Content-Length
和Content-Type
标题。
那么,我做错了什么,或者误解了--data
参数?
答案 0 :(得分:0)
在第一个命令行中,您发出一个curl GET请求(在该行中不需要-X GET,这是给定普通URL时的默认操作)。
- 数据提供要在请求正文中使用的数据。这是有效载荷curl在请求中发送的。它不是URL的一部分,它不是任何标题的一部分。发送这样的请求主体时,curl还包括您观察到的Content-Length和Content-Type标题。
- 默认情况下,数据意味着POST。你用-X GET覆盖它(并且我总是说:-X应该很少使用)所以你发送一个带有请求体有效负载的GET请求。一个非常不寻常的HTTP请求 - 但是完全有效的HTTP规范。
curl还有一个-G选项,可以使用--data选项转换传入的内容,并将该数据放在URL的末尾,而不是将其作为GET请求。