Bird
Raised Fist0
Linux CLIscripting~5 mins

curl for HTTP requests in Linux CLI - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes you need to talk to websites or servers from your command line. Curl helps you send and receive data over the internet using simple commands.
When you want to check if a website is up and running by fetching its homepage.
When you need to download a file from a URL without opening a browser.
When you want to send data to a web server, like submitting a form or API request.
When you want to see the headers a server sends back to understand how it responds.
When you want to test an API endpoint quickly from your terminal.
Commands
This command fetches the homepage of example.com and shows the HTML content in your terminal.
Terminal
curl https://example.com
Expected OutputExpected
<!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } </style> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p> <p><a href="https://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>
This command fetches only the HTTP headers from example.com to see metadata like server type and content length.
Terminal
curl -I https://example.com
Expected OutputExpected
HTTP/1.1 200 OK Age: 604800 Cache-Control: max-age=604800 Content-Type: text/html; charset=UTF-8 Date: Sat, 01 Jan 2022 00:00:00 GMT Etag: "3147526947+ident" Expires: Sat, 08 Jan 2022 00:00:00 GMT Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT Server: ECS (nyb/1D2D) Vary: Accept-Encoding X-Cache: HIT Content-Length: 1256
→
-I - Fetch only HTTP headers without the body content
This command downloads the homepage of example.com and saves it to a file named example.html.
Terminal
curl -o example.html https://example.com
Expected OutputExpected
No output (command runs silently)
→
-o - Save the output to a file instead of printing it
This command sends data using POST method to httpbin.org, which echoes back what it received. Useful for testing form submissions.
Terminal
curl -X POST -d "name=John&age=30" https://httpbin.org/post
Expected OutputExpected
{ "args": {}, "data": "", "files": {}, "form": { "age": "30", "name": "John" }, "headers": { "Content-Length": "13", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org" }, "json": null, "origin": "127.0.0.1", "url": "https://httpbin.org/post" }
→
-X POST - Specify the HTTP method as POST
→
-d - Send the specified data in the request body
Key Concept

If you remember nothing else from curl, remember: it lets you send and receive web data right from your terminal with simple commands.

Common Mistakes
Forgetting to use quotes around data with special characters in the -d flag
The shell may misinterpret special characters, causing the command to fail or send wrong data.
Always put the data string in double quotes when using -d, like -d "name=John&age=30".
Using curl without -o when you want to save output to a file
Curl prints the content to the terminal, cluttering your screen and not saving the file.
Use -o filename to save the output to a file.
Not specifying -X POST when sending data to an endpoint that requires POST
Curl defaults to GET, so the server may reject or ignore the data sent.
Use -X POST to tell curl to send a POST request.
Summary
Use curl to fetch web pages or data from URLs directly in your terminal.
Use -I to get only headers, and -o to save output to a file.
Use -X and -d flags to send data with POST requests.

Practice

(1/5)
1. What does the curl command primarily do in Linux?
easy
A. Monitor system processes
B. Send HTTP requests to websites
C. Manage file permissions
D. Compile source code

Solution

  1. Step 1: Understand the purpose of curl

    The curl command is designed to send HTTP requests and interact with web servers.
  2. Step 2: Compare with other options

    Compiling code, managing permissions, and monitoring processes are unrelated to curl's function.
  3. Final Answer:

    Send HTTP requests to websites -> Option B
  4. Quick Check:

    curl = HTTP requests [OK]
Hint: curl is for web requests, not system tasks [OK]
Common Mistakes:
  • Confusing curl with system commands like chmod or ps
  • Thinking curl compiles code
  • Assuming curl manages files locally
2. Which of the following is the correct syntax to fetch the content of http://example.com using curl?
easy
A. curl http://example.com
B. curl --head http://example.com
C. curl -x http://example.com
D. curl -d http://example.com

Solution

  1. Step 1: Identify basic curl usage

    To fetch a webpage, simply use curl URL. No extra flags are needed for a simple GET request.
  2. Step 2: Analyze other options

    -x is for proxy, --head fetches headers only, -d sends data (POST), so they are incorrect for simple fetch.
  3. Final Answer:

    curl http://example.com -> Option A
  4. Quick Check:

    Basic fetch = curl URL [OK]
Hint: Use curl followed by URL to fetch page [OK]
Common Mistakes:
  • Using -x which is for proxy
  • Using -d which sends data instead of fetching
  • Using --head which fetches headers only
3. What will be the output of this command?
curl -I https://example.com
medium
A. An error because -I is invalid
B. The full HTML content of the page
C. Only the HTTP headers of the response
D. The page content saved to a file

Solution

  1. Step 1: Understand the -I option in curl

    The -I flag tells curl to fetch only the HTTP headers, not the full content.
  2. Step 2: Check other options

    The full HTML content of the page is full content, which -I does not do. An error because -I is invalid is wrong because -I is valid. The page content saved to a file requires -o flag, not present here.
  3. Final Answer:

    Only the HTTP headers of the response -> Option C
  4. Quick Check:

    -I = headers only [OK]
Hint: Remember -I fetches headers only [OK]
Common Mistakes:
  • Thinking -I fetches full page
  • Confusing -I with -o for output file
  • Assuming -I is invalid flag
4. You want to send JSON data {"name":"John"} to http://api.example.com/users using curl. Which command has an error?
medium
A. curl -d '{name:John}' -X POST -H "Content-Type: application/json" http://api.example.com/users
B. curl -X POST -H "Content-Type: application/json" -d '{"name":"John"}' http://api.example.com/users
C. curl -d '{"name":"John"}' http://api.example.com/users -H "Content-Type: application/json" -X POST
D. curl -X POST -d '{"name":"John"}' -H "Content-Type: application/json" http://api.example.com/users

Solution

  1. Step 1: Check JSON data format

    curl -d '{name:John}' -X POST -H "Content-Type: application/json" http://api.example.com/users uses '{name:John}' which misses double quotes around keys and values, making it invalid JSON. Options A, C, D use correct JSON '{"name":"John"}'.
  2. Step 2: Confirm curl flags order

    Order of flags does not matter in curl, so A, C, D are valid. Only data format in B is wrong.
  3. Final Answer:

    curl -d '{name:John}' -X POST -H "Content-Type: application/json" http://api.example.com/users -> Option A
  4. Quick Check:

    JSON must have quotes [OK]
Hint: JSON keys and values need quotes [OK]
Common Mistakes:
  • Omitting quotes in JSON data
  • Thinking flag order matters in curl
  • Using wrong content-type header
5. You want to download a file from http://example.com/file.zip and save it as myfile.zip. Which curl command does this correctly?
hard
A. curl --save myfile.zip http://example.com/file.zip
B. curl -O http://example.com/file.zip > myfile.zip
C. curl -O myfile.zip http://example.com/file.zip
D. curl -o myfile.zip http://example.com/file.zip

Solution

  1. Step 1: Understand curl file saving options

    -o filename saves the download to the specified filename. -O saves with original name from URL.
  2. Step 2: Analyze each option

    B: curl -O http://example.com/file.zip > myfile.zip saves to 'file.zip' via -O and redirects empty stdout to myfile.zip. C: curl -O myfile.zip http://example.com/file.zip uses -O incorrectly, treating myfile.zip as URL. D: uses invalid flag --save.
  3. Final Answer:

    curl -o myfile.zip http://example.com/file.zip -> Option D
  4. Quick Check:

    -o sets output filename [OK]
Hint: Use -o to name downloaded file [OK]
Common Mistakes:
  • Using > redirection for binary files
  • Confusing -O and -o flags
  • Using non-existent flags like --save
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard