Table of contents
curl is a CLI tool that allows you to transfer data to or from a server in a variety of different protocols. In this post, you can find some examples that demonstrate the basic
curl options for the HTTP/HTTPS protocols.
GET is the default HTTP method, so you don’t have to use an option. You can pass only the URL:
curl -X OPTIONS -i https://jsonplaceholder.typicode.com/
-i or --include option gives back the response headers, not only the response body—more about that in a bit.
When you perform a
POST request, you usually send some data to the server. You can send data with the
-d or --data option:
curl https://jsonplaceholder.typicode.com/todos \ --data "title=Groceries&body=Buy groceries." # The backslash (\) spans the command over multiple lines
You don’t have to state the method with
-X POST because
POST is the default method when you use the
--data option. You send the data as
content-type: application/x-www-form-urlencoded. See also
-F or --form and
If you want to perform a
PUT request, you have to specify the method along with the data you want to send:
curl https://jsonplaceholder.typicode.com/todos/1 \ -X PUT \ --data "title=Groceries&body=Buy groceries."
When you make an HTTP request with
curl, the default output you get is the response body. If you want to get the headers, you have 3 options:
This is what you want most of the times. To get both response headers and body, you can use the
-i or --include option:
curl https://www.google.com/ -i
To get only the response headers—without the response body—use the
-I or --head option:
curl https://www.google.com/ -I
With this option, you perform a
HEAD HTTP request. You can achieve the same thing if you set the HTTP method to
curl -X HEAD. But because you get only the response body by default, you also have to include the headers with
-i or --include, so the final command would be:
curl -X HEAD -i. As a result, the
-I or --head option is preferred.
Sometimes, you want more details about the exchange between the server and the client. For example, you may want to see the request headers. In this case, you can use the
-v or --verbose option. You get a lot more information, though, not only the request headers:
curl https://www.google.com/ --verbose
To find the request headers, look for the lines that start with
>. The response headers, on the other hand, start with
<. The lines that start with an asterisk (
*) are TCP or TLS stuff.
To follow the redirects use the
-L or --location option. You should also append the response headers with the
-i option to see what’s going on:
curl http://google.com --location -i
Try the same request without the
--location option if you want to see the difference.
You can use the
-o or --output option to save the console output in a file:
curl https://www.google.com -i -o google.txt
If you want to save a file and keep the original filename in your local machine, use the
-O or --remote-name option:
curl -O https://markoskon.com/static/fa71d793057a033cf6b13329754cb6fc/dbbca/all-cool-dev.jpg
If you want to give the file a new name, use the
-o or --output instead:
curl -o gatsby-modals.jpg https://markoskon.com/static/fa71d793057a033cf6b13329754cb6fc/dbbca/all-cool-dev.jpg
More useful options for another post:
- Upload a file with the
-T or --upload-fileoption.
- Save multiple files with
-o or --output
- Other options you have to send data to the server.
- Set headers with
-H or --headeroption.
Other things to read
- Reveal animations on scroll with react-spring
- Gatsby background image example
- Extremely fast loading with Gatsby and self-hosted fonts