Curl提供了一系列以X为前缀的不同http方法调用,但也提供了不带X的相同方法。我两个都试过了,但我似乎找不出其中的区别。有人能给我解释一下这两种操作有什么不同吗?
发布于 2011-12-14 17:20:44
默认情况下,您使用curl,但没有明确说明要使用哪个请求方法。如果只传入一个HTTP URL,比如curl http://example.com,它将使用GET。如果使用-d或-F,curl将使用POST,-I将导致HEAD,而-T将使其成为PUT。
如果出于任何原因,您对curl为您执行的这些默认选择不满意,您可以通过指定-X [WHATEVER]来覆盖这些请求方法。这样,例如,您可以通过执行curl -X DELETE [URL]来发送DELETE。
因此,做curl -X GET [URL]是没有意义的,因为GET无论如何都会被使用。同样地,做curl -X POST -d data [URL]...也没有意义,但是您可以发出一个有趣的、有点罕见的请求,在GET请求中使用类似curl -X GET -d data [URL]的内容发送一个请求体。
更深层次的挖掘
curl -GET (使用单个破折号)不适用于此目的。这等同于指定-G、-E和-T选项,这将做一些完全不同的事情。
还有一个名为--get的curl选项,它不会混淆这两个选项。它是-G的长格式,用于将用-d指定的数据转换为GET请求而不是POST。
(我随后在这里使用了我自己的答案来填充curl FAQ to cover this。)
警告
当启用冗余模式(-v)时,curl的现代版本将通知用户这种不必要的和潜在有害的-X使用--让用户意识到。在this blog post中进一步解释和激励。
-G将POST +主体转换为GET +查询
您可以要求curl转换一组-d选项,而不是使用POST在请求正文中发送它们,而是将它们放在URL查询字符串的末尾,并使用`-G发出GET。如下所示:
curl -d name=daniel -d grumpy=yes -G https://example.com/发布于 2017-02-01 01:42:23
-X你的方法
X允许您重写默认的'Get‘
**将小写x更正为大写X
发布于 2019-10-13 04:36:07
使用-X [WHATEVER]只会更改请求中使用的方法字符串。通过两个示例更容易理解这一点-一个有-X [WHATEVER],一个没有-以及每个示例的相关HTTP请求标头:
# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*
# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*https://stackoverflow.com/questions/8498371
复制相似问题