Curl 提供了一系列不同的以 X 为前缀的 http 方法调用,但也提供了相同的方法而没有。我都试过了,我似乎无法找出区别。有人可以快速向我解释这两种操作有何不同吗?
3 回答
默认情况下,您使用 curl 而不明确说明要使用哪种请求方法。如果你只是传入一个 HTTP URL,curl http://example.com
它会使用 GET。如果你使用-d
或-F
curl 将使用 POST,-I
将导致 HEAD 并-T
使其成为 PUT。
如果出于某种原因您对 curl 为您所做的这些默认选择不满意,您可以通过指定-X [WHATEVER]
. 例如,您可以通过这种方式发送 DELETE curl -X DELETE [URL]
。
因此,这样做毫无意义,curl -X GET [URL]
因为无论如何都会使用 GET。同样,这样做是没有意义的,curl -X POST -d data [URL]...
但是您可以发出一个有趣且有些罕见的请求,该请求在 GET 请求中发送请求主体,例如curl -X GET -d data [URL]
.
深层发掘
curl -GET
(使用单个破折号)为此目的是错误的。这相当于指定-G
,-E
和-T
选项,并且会做一些完全不同的事情。
还有一个 curl 选项被称为--get
不要将事情与任何一个混淆。它是 -G 的长格式,用于将指定的数据转换-d
为 GET 请求而不是 POST。
(我随后在这里使用我自己的答案来填充curl 常见问题解答以涵盖此问题。)
警告
当启用详细模式 ( ) 时,现代版本的 curl 将通知用户有关 -X 的这种不必要且可能有害的使用-v
- 以使用户了解。在这篇博文中进一步解释和激励。
-G 将 POST + 正文转换为 GET + 查询
您可以要求 curl 转换一组-d
选项,而不是使用 POST 在请求正文中发送它们,而是将它们放在 URL 查询字符串的末尾并使用 `-G 发出 GET。像这样:
curl -d name=daniel -d grumpy=yes -G https://example.com/
-X [您的方法]
X 允许您覆盖默认的“获取”
** 将小写改正x
为大写X
的使用-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: */*