curl: - data似乎做了不同的事情,将数据附加到URL

时间:2014-08-22 14:20:06

标签: curl

我可以这样做:

$ 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-LengthContent-Type标题。

那么,我做错了什么,或者误解了--data参数?

1 个答案:

答案 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请求。