curl -GET和-X GET


126

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

Answers:


263

默认情况下,您使用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常见问题解答以解决此问题。)

警告事项

当启用详细模式(-v)时,现代版本的curl会通知用户有关-X的不必要和潜在有害使用的信息-使用户知道。在此博客文章中进一步进行了解释和说明。

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

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

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

5
-XGET可能是no-op,但确实使它显式。
mtyson '16

“默认情况下,您使用curl时不会明确说明要使用哪种请求方法。如果仅传递HTTP URL(例如curl example.com),它将使用GET。如果使用-d或-F curl将使用POST,则-I将导致HEAD和-T将使其成为PUT。” 您需要知道的一切。
Donato

4
只要有选择,显式总比隐式好。尽早失败,快速失败,减少事故,减少调试时间。您唯一有理由跳过的理由是在命令行中键入它。任何脚本都应指定-XGET,即使绝对没有必要。
步步高

1
@步步高,如果他们这样做,那就错了。但是可以,他们可以。
Daniel Stenberg

2

-X [您的方法]
X使您可以覆盖默认的“获取”

**将小写x改成大写X


2
这甚至都没有试图回答“这两个操作有何不同”的问题。
Melebius

1

-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: */*
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.