Curl提供了一系列以X为前缀的不同http方法调用,但也提供了相同的方法。我已经试过了两个,我似乎无法找出差异。有人可以快速向我解释这两种操作的不同之处吗?
答案 0 :(得分:225)
默认情况下,您使用curl而不明确说明要使用的请求方法。如果您只传入curl http://example.com
之类的HTTP网址,则会使用GET。如果您使用-d
或-F
curl将使用POST,-I
将导致HEAD,-T
将使其成为PUT。
如果由于某种原因你对curl为你做的这些默认选择不满意,你可以通过指定-X [WHATEVER]
来覆盖这些请求方法。这样,您可以通过执行curl -X DELETE [URL]
发送DELETE。
因此无论如何都要使用G curl -X GET [URL]
是没有意义的。同样,做curl -X POST -d data [URL]...
也没有意义但是你可以做一个有趣且有点罕见的请求,在GET请求中发送请求体,例如curl -X GET -d data [URL]
。
curl -GET
(使用单个破折号)是错误的。这相当于指定-G
,-E
和-T
选项,这将做一些完全不同的事情。
还有一个名为--get
的卷曲选项,不会将问题与其中任何一个混淆。它是-G的长格式,用于将用-d
指定的数据转换为GET请求而不是POST。
(我随后在这里使用我自己的答案来填充curl FAQ to cover this。)
现在版本的curl会在启用详细模式(-v
)时通知用户这种不必要且可能有害的-X使用 - 让用户知道。在this blog post中进一步解释和激励。
您可以要求curl转换一组-d
选项,而不是使用POST在请求正文中发送它们,将它们放在URL的查询字符串的末尾并发出GET,并使用` -G。像这样:
curl -d name=daniel -d grumpy=yes -G https://example.com/
答案 1 :(得分:2)
-X [你的方法]
X允许您覆盖默认的“获取”
**将小写x
更正为大写X
答案 2 :(得分:0)
使用-X [WHATEVER]
仅更改HTTP请求中使用的请求的方法字符串。通过两个示例(一个带有-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: */*
答案 3 :(得分:-1)
也许我没有关注你的问题,但看起来有一个选项-G只是告诉curl使用GET方法然后有-X选项,它允许你制作任何你想要的方法。所以卷曲-G和卷曲-XGET也是一回事。我没有看到-GET似乎curl在-G之后忽略了任何东西。