DEV Community

Safal Bhattarai
Safal Bhattarai

Posted on

Linux curl Command: 5 Examples Every Developer Should Know

The curl command transfers data to and from a server using protocols like HTTP and HTTPS. Developers use it to test APIs, check response headers, download files, and debug web requests right from the terminal.

This is part 5 of my Linux networking series. If you missed the earlier posts, start with Linux dig Command: 5 Examples Every Developer Should Know, then read the nslookup, ping, and traceroute posts.

1. Install curl

curl is already installed on many systems. If it's missing, install it on Debian/Ubuntu with:

sudo apt update
sudo apt install curl
Enter fullscreen mode Exit fullscreen mode

Check the version:

curl --version
Enter fullscreen mode Exit fullscreen mode

2. Make a Basic GET Request

curl https://google.com
Enter fullscreen mode Exit fullscreen mode

This sends a GET request and prints the response body to the terminal. Since google.com redirects, you'll see a short HTML page telling you the page has moved. The next examples show how to handle that.

To hide the progress meter in scripts, add -s (silent):

curl -s https://google.com
Enter fullscreen mode Exit fullscreen mode

3. Check Response Headers and Follow Redirects

Show only the response headers with -I:

curl -I https://google.com
Enter fullscreen mode Exit fullscreen mode

This is handy for checking the status code, content type, caching headers, and where a redirect points.

Follow redirects automatically with -L:

curl -L https://google.com
Enter fullscreen mode Exit fullscreen mode

Combine both to see the headers of the final page:

curl -IL https://google.com
Enter fullscreen mode Exit fullscreen mode

4. Download a File

Save the output to a file name of your choice with -o:

curl -o page.html https://google.com
Enter fullscreen mode Exit fullscreen mode

Save the file using its original name from the URL with -O:

curl -O https://example.com/file.zip
Enter fullscreen mode Exit fullscreen mode

Resume an interrupted download with -C -:

curl -C - -O https://example.com/file.zip
Enter fullscreen mode Exit fullscreen mode

5. Send Data to an API (POST Request)

Send JSON using a POST request:

curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"name": "Safal", "role": "developer"}'
Enter fullscreen mode Exit fullscreen mode
  • -X POST sets the HTTP method.
  • -H adds a request header.
  • -d sets the request body.

Add an authorization header when an API needs a token:

curl https://api.example.com/data \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Replace YOUR_TOKEN with a real token, and keep real tokens out of your shell history and public posts.

Bonus: Debug with Verbose Output

curl -v https://google.com
Enter fullscreen mode Exit fullscreen mode

The -v option shows the DNS lookup, the connection, the TLS handshake, and the full request and response headers. It's the best way to see what is really happening during a request.

Bonus: Measure How Long a Request Takes

curl -o /dev/null -s -w "Total time: %{time_total}s\n" https://google.com
Enter fullscreen mode Exit fullscreen mode

Here -o /dev/null throws away the body, -s hides the progress meter, and -w prints the timing you ask for. You can also use %{http_code} to print the status code.

Common Options

Option What it does
-s Silent mode, no progress meter
-I Show response headers only
-L Follow redirects
-o Save output to a file name you choose
-O Save output using the remote file name
-X Set the HTTP method
-H Add a request header
-d Send data in the request body
-v Verbose output for debugging

Conclusion

The curl command is one of the most useful tools for developers and DevOps engineers. Used together with dig, nslookup, ping, and traceroute, you can follow a request from DNS lookup all the way to the HTTP response.

Next: Linux ss Command: Simple Examples.


About Me

I'm Safal Bhattarai, a Tech Lead, Full Stack Developer, and DevOps Engineer.

๐ŸŒ Website ยท ๐Ÿ’ป GitHub

Top comments (0)