159

Curl 提供了一系列不同的以 X 为前缀的 http 方法调用,但也提供了相同的方法而没有。我都试过了,我似乎无法找出区别。有人可以快速向我解释这两种操作有何不同吗?

4

3 回答 3

313

默认情况下,您使用 curl 而不明确说明要使用哪种请求方法。如果你只是传入一个 HTTP URL,curl http://example.com它会使用 GET。如果你使用-d-Fcurl 将使用 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/
于 2011-12-14T09:20:44.463 回答
3

-X [您的方法]
X 允许您覆盖默认的“获取”

** 将小写改正x为大写X

于 2017-01-31T17:42:23.220 回答
2

的使用-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: */*
于 2019-10-12T20:36:07.217 回答