cURL: Why is it so useful
When you visit a website, your browser sends requests to a server. cURL (Client URL) is a command-line tool that lets you do the same thing, i.e. send requests directly from your terminal. Think of it as a text-based browser without the visuals.
Why Programmers Need cURL
Every developer eventually needs to talk to servers directly:
Test APIs before writing client code
Debug web requests without browser noise
Automate tasks in scripts and CI/CD pipelines
Check server responses for headers and status codes
Learn HTTP by seeing raw communication
A simple cURL command that fetches a webpage of Google:
curl https://www.google.com
You'll receive an HTML response like:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Google</h1>
</body>
</html>
Understanding Request and Response
HTTP follows a simple conversation:
Your request:
GET /api/data HTTP/1.1
Host: example.com
User-Agent: curl/7.64.1
Accept: application/json
Server response:
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 01 Jan 2025 12:00:00 GMT
{"status": "success", "data": "Hello!"}
Key parts to understand:
Status code:
200means success,404means not found,500means server errorHeaders: Metadata about the request/response
Body: The actual data/content
Using cURL to Talk to APIs
GET Requests (Retrieve Data)
# Basic GET with URL parameters
curl "https://api.example.com/users?id=123"
# GET with custom headers (for API keys)
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.example.com/profile
POST Requests (Send Data)
# Send JSON data
curl -X POST \
-H "Content-Type: application/json" \
-d '{"username": "john", "email": "john@example.com"}' \
https://api.example.com/users
# Send form data
curl -X POST \
-d "username=john&email=john@example.com" \
https://api.example.com/register
Browser vs cURL:
Browser: Renders HTML, runs JavaScript, handles cookies automatically
cURL: Raw HTTP communication, perfect for API testing and automation
When to use cURL over browser tools:
Testing headless/backend services
Automating repetitive API checks
Learning HTTP fundamentals
Debugging network issues without browser extensions
Essential cURL Flags to Know
Start with these basics, then explore others as needed:
# See request and response headers
curl -v https://example.com
# Follow redirects (like a browser)
curl -L https://example.com
# Save output to file
curl -o output.html https://example.com
# Use a different HTTP method
curl -X DELETE https://api.example.com/resource/123
# Include response headers in output
curl -i https://api.example.com/data
Wrapping Up
Once comfortable with basics, explore:
Cookies:
-bto send,-cto storeFile uploads:
-Ffor multipart formsTimeouts:
--connect-timeoutand--max-timeProxies:
-xfor proxy support
Remember: cURL is a Swiss Army knife for HTTP. Don't try to learn all options at once. Start with simple GET requests, then add complexity as needed for your specific tasks.
Enjoyed this guide? Let's connect!
🐦 Twitter/X: @rohan_gupta96
💼 LinkedIn: https://www.linkedin.com/in/rohangupta9896
🐙 GitHub: https://github.com/rohan9896