curl -GET和-X GET

mat*_*sko 111 curl http-method

Curl提供了一系列不同的http方法调用,它们以X为前缀,但也提供了相同的方法.我已经试过了两个,我似乎无法找出差异.有人可以快速向我解释这两种操作有何不同?

Dan*_*erg 241

默认情况下,您使用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选项和会做完全不同的事情.

还有一个卷曲选项被称为--get不会混淆任何问题.它是-G的长形式,用于将指定的数据-d转换为GET请求而不是POST.

(我随后在这里使用我自己的答案来填充卷曲常见问题以解决这个问题.)

警告

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

-G将POST +正文转换为GET +查询

您可以要求curl转换一组-d选项,而不是使用POST在请求体中发送它们,将它们放在URL查询字符串的末尾并使用`-G发出GET.像这样:

curl -d name=daniel -d grumpy=yes -G https://example.com/
Run Code Online (Sandbox Code Playgroud)

  • -XGET可能是no-op,但它确实使它明确. (5认同)
  • 只要有选择,显式总比隐式好。提前失败,快速失败,减少事故,减少调试时间。唯一的跳过借口的方法是在命令行中键入它。任何脚本都应指定-XGET,即使绝对没有必要。 (2认同)
  • @西洋双陆棋,如果他们这样做,他们就做错了。但当然,他们可以。 (2认同)

Jim*_*ine 7

使用仅更改HTTP 请求中使用的-X [WHATEVER]请求方法字符串。通过两个示例 \xe2\x80\x94 更容易理解,一个包含-X [WHATEVER]\xe2\x80\x94 ,一个不包含 \xe2\x80\x94 以及每个示例的关联 HTTP 请求标头:

\n\n
# curl -XPANTS -o nul -v http://neverssl.com/\n* Connected to neverssl.com (13.224.86.126) port 80 (#0)\n> PANTS / HTTP/1.1\n> Host: neverssl.com\n> User-Agent: curl/7.42.0\n> Accept: */*\n\n# curl -o nul -v http://neverssl.com/\n* Connected to neverssl.com (13.33.50.167) port 80 (#0)\n> GET / HTTP/1.1\n> Host: neverssl.com\n> User-Agent: curl/7.42.0\n> Accept: */*\n
Run Code Online (Sandbox Code Playgroud)\n