Author: Josh Amata
Last Updated: Wed, Mar 30, 2022Curl is a software project consisting of the libcurl library and the curl command-line tool that supports FTP, FTPS, HTTP, HTTPS, and many other network protocols. Curl is pre-installed in many operating systems, and developers use it extensively to transfer data and make API requests. This guide explains how to use curl and make requests with the tool.
The basic curl syntax is:
curl [options] [url]
To download a webpage with curl:
$ curl www.example.com/index.html
This downloads the complete webpage and displays the source code to your terminal. If you omit the protocol, curl defaults to https://
.
If you want to use FTP instead:
$ curl ftp://www.example.com/index.html
To save the contents of your download to a file, add the `-o' option followed by the filename:
$ curl -o filename.txt www.example.com/index.html
This downloads the webpage https://www.example.com/index.html
to filename.txt
. You can also omit the filename to take the default name from the server:
$ curl -O www.example.com/index.html
If something interrupts your download, you can resume downloads with the -C
option:
$ curl -C -O www.example.com/index.html
Enable verbose mode with the short option -v
or long option --verbose
:
$ curl -v www.google.com
Curl has more than 200 options for HTTP requests, a few of which include:
To get only the headers from a response excluding the body, use the -I
option:
$ curl -I www.example.com
Curl doesn't follow redirects unless you add the -L
option:
$ curl -L http://www.example.com
By default, curl uses the GET method. To change methods, use the -X
option followed by the method you want to use. For example, to use the DELETE method:
$ curl -X DELETE www.example.com?id=4
To add extra headers, such as setting the User-Agent or Cache-Control field, use the -H
option:
$ curl -H "User-Agent: Mozilla/5.0 (Macintosh)" -H "Cache-Control: no-cache"
You can change the user-agent with the --user-agent
option:
$ curl --user-agent "Mozilla/5.0 (Macintosh)" -H "Cache-Control: no-cache"
To send data with a POST request, use the `-d' option followed by the data you want to send:
$ curl -d "option1=value1&option2=value2" -X POST https://www.example.com
The Content-Type is automatically set to "application/x-www-form-urlencoded" in the example above. To send JSON data and explicitly set the Content-Type to application/json, use the -H
option to set the Content-Type:
$ curl -X POST -H "Content-Type: application/json" -d '{"option1":"value1", "option2":"value2"}' https://www.example.com
If a resource requires basic HTTP authentication, pass the credentials with the -u
option:
$ curl -u login:password www.example.com
Curl automatically converts the login:password pair to a base64-encoded string token and adds the Authorization: Basic <base64 token>
header to the request.
This guide doesn't cover every curl option. These are only the most popular uses of the tool. For more information, check the man page.