Curl offers a series of different http method calls that are prefixed with a X, but also offers the same methods without. I’ve tried both and I can’t seem to figure out the difference. Can someone explain to me quickly how these two operations differ?
Share
By default you use curl without explicitly saying which request method to use. If you just pass in a HTTP URL like
curl http://example.comit will use GET. If you use-dor-Fcurl will use POST,-Iwill cause a HEAD and-Twill make it a PUT.If for whatever reason you’re not happy with these default choices that curl does for you, you can override those request methods by specifying
-X [WHATEVER]. This way you can for example send a DELETE by doingcurl -X DELETE [URL].It is thus pointless to do
curl -X GET [URL]as GET would be used anyway. In the same vein it is pointless to docurl -X POST -d data [URL]...But you can make a fun and somewhat rare request that sends a request-body in a GET request with something likecurl -X GET -d data [URL].Digging deeper
curl -GET(using a single dash) is just wrong for this purpose. That’s the equivalent of specifying the-G,-Eand-Toptions and that will do something completely different.There’s also a curl option called
--getto not confuse matters with either. It is the long form of -G, which is used to convert data specified with-dinto a GET request instead of a POST.(I subsequently used my own answer here to populate the curl FAQ to cover this.)
Warnings
Modern versions of curl will inform users about this unnecessary and potentially harmful use of -X when verbose mode is enabled (
-v) – to make users aware. Further explained and motivated in this blog post.-G converts a POST + body to a GET + query
You can ask curl to convert a set of
-doptions and instead of sending them in the request body with POST, put them at the end of the URL’s query string and issue a GET, with the use of `-G. Like this: