和-X GET

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

241650 次浏览

默认情况下,使用 curl 时不会显式说明要使用哪个请求方法。如果您只是传递一个像 curl http://example.com这样的 HTTP URL,那么它将使用 GET。如果你使用 -d-F旋度将使用 POST,-I将导致一个 HEAD 和 -T将使其成为一个 PUT。

如果由于某种原因您不喜欢 curl 为您做的这些默认选择,您可以通过指定 -X [WHATEVER]来覆盖这些请求方法。这种方法可以例如通过执行 curl -X DELETE [URL]来发送 DELETE。

因此,无论如何使用 GET,执行 curl -X GET [URL]都是没有意义的。同样,做 curl -X POST -d data [URL]...也是没有意义的,但是您可以使用类似于 curl -X GET -d data [URL]的请求在 GET 请求中发送一个 request-body,这样的请求很有趣,而且比较少见。

深入调查

curl -GET(使用单破折号)在这方面是错误的。这相当于指定了 -G-E-T选项,它们的作用完全不同。

还有一个名为 --get的 curl 选项,用来避免将事情与任何一个混淆。它是长形式的-G,用于将用 -d指定的数据转换为 GET 请求而不是 POST。

(我随后在这里使用了自己的答案来填充 请参阅常见问题解答。)

警告

当启用详细模式(-v)时,curl 的现代版本将告知用户这种不必要且可能有害的使用 -X 的方法,以使用户了解。在 这篇博文中进一步解释和激励。

- G 将 POST + body 转换为 GET + 查询

你可以要求 curl 转换一组 -d选项,而不是通过 POST 将它们发送到请求主体中,将它们放在 URL 查询字符串的末尾,然后发出一个 GET,使用‘-G,像这样:

curl -d name=daniel -d grumpy=yes -G https://example.com/

X [你的方法]
X 允许您覆盖默认的‘ Get’

* * 将小写字母 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: */*