DEV Community

sanjeev singh
sanjeev singh

Posted on

Getting Started with cURL: Your First Steps in Talking to Servers

What Are Servers, and Why Do We Need to Talk to Them?

Before we dive into cURL, let's understand a fundamental concept: servers.

Imagine you're at a restaurant. You (the client) want food, but you don't go into the kitchen yourself. Instead, you tell the waiter what you want, the waiter takes your request to the kitchen (the server), and then brings back your food (the response).

In programming, it works similarly:

  • Your computer is the client (like you at the restaurant)
  • The server is a powerful computer somewhere that has data or can do things for you
  • The communication happens over the internet

Servers can:

  • Store and send website data
  • Process your login information
  • Save your uploaded photos
  • Send you weather information
  • And much, much more!
You (Client) ──[Request]──> Server
                            (processes)
You (Client) <──[Response]── Server
Enter fullscreen mode Exit fullscreen mode

Now, how do we talk to these servers? That's where cURL comes in!


What is cURL?

cURL (which stands for "Client URL") is a command-line tool that lets you send requests to servers and see their responses—all from your terminal.

Think of cURL as your direct phone line to any server on the internet. Instead of clicking around in a browser, you type commands and get raw responses back.

Simple definition: cURL is a way to send messages to servers from your terminal and see what they send back.


Why Do Programmers Need cURL?

You might be thinking, "Why not just use a browser?" Great question! Here's why cURL is essential:

1. Testing APIs Without Writing Code

When you're building an application, you often need to test if an API (Application Programming Interface) is working before you write any code. cURL lets you do that instantly.

2. Automation and Scripts

Browsers need humans to click buttons. cURL can be used in scripts that run automatically—like checking if your website is up every 5 minutes.

3. Debugging

When something goes wrong, cURL shows you exactly what's being sent and received. It's like having X-ray vision for web requests.

4. Working with APIs

Most modern applications rely on APIs to exchange data. cURL is perfect for exploring and testing these APIs.

5. Backend Development

As a backend developer, you often work with servers that don't have visual interfaces. cURL is your primary way to interact with them.

Real-world example: You're building a weather app. Before writing all your JavaScript code, you can use cURL to quickly check if the weather API is working and what data it returns.


Making Your First Request with cURL

Let's jump in! Open your terminal and type this simple command:

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

Press Enter, and... boom! You'll see a bunch of HTML code scroll across your screen.

Congratulations! You just made your first cURL request! 🎉

What Just Happened?

Your Terminal ──[cURL sends request]──> example.com server
                                        (server processes)
Your Terminal <──[HTML code returned]── example.com server
Enter fullscreen mode Exit fullscreen mode

Let me break it down:

  1. You typed: curl https://example.com
  2. cURL sent a request to the server at example.com saying "Hey, send me your homepage!"
  3. The server responded by sending back the HTML code for the homepage
  4. cURL displayed that response in your terminal

This is exactly what your browser does, except your browser also renders the HTML into a beautiful webpage. cURL just shows you the raw code.


Understanding Requests and Responses

Every time you use cURL (or browse the web), two things happen: a request goes out, and a response comes back.

The Request

A request is like sending a letter. It contains:

  • Where to send it (the URL)
  • What you want (get a page, send data, etc.)
  • How you're asking (the HTTP method: GET, POST, etc.)
  • Additional info (headers, authentication, etc.)

The Response

A response is what the server sends back. It contains:

  • Status code (did it work? 200 = success, 404 = not found)
  • Headers (metadata about the response)
  • Body (the actual data you requested)

---

## Browser Request vs cURL Request

Let's compare how browsers and cURL do the same thing:

### Browser Request
Enter fullscreen mode Exit fullscreen mode
  1. You type "google.com" in address bar
  2. Browser sends GET request to Google's server
  3. Browser receives HTML, CSS, JavaScript
  4. Browser renders it into a pretty webpage
  5. You see the Google homepage

### cURL Request
Enter fullscreen mode Exit fullscreen mode
  1. You type "curl https://google.com"
  2. cURL sends GET request to Google's server
  3. cURL receives HTML, CSS, JavaScript
  4. cURL shows you the raw code in terminal
  5. You see the source code

**The key difference:** Browsers make things pretty. cURL shows you the raw truth. Both are talking to servers in the same way!

---

## Using cURL to Talk to APIs

Now let's do something more exciting: let's talk to a real API!

APIs are special servers designed to send data in a clean format (usually JSON) instead of HTML. They're perfect for cURL practice.

### Example 1: Getting Random User Data

Try this:

Enter fullscreen mode Exit fullscreen mode


bash
curl https://jsonplaceholder.typicode.com/users/1


You'll see something like:

Enter fullscreen mode Exit fullscreen mode


json
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"city": "Gwenborough"
}
}


**What happened?** You just asked an API for information about user #1, and it sent you back nice, clean JSON data!

### Example 2: Getting a List of Posts

Enter fullscreen mode Exit fullscreen mode


bash
curl https://jsonplaceholder.typicode.com/posts


This returns a list of blog posts in JSON format. 

**See how easy that was?** You're now talking to APIs like a pro!

---

## Understanding HTTP Methods: GET and POST

When you talk to a server, you need to tell it *what kind* of action you want. The two most common are GET and POST.

### GET - "Give Me Information"

**Use case:** When you want to *retrieve* data without changing anything on the server.

Enter fullscreen mode Exit fullscreen mode


bash
curl https://api.example.com/products


This is like asking, "Hey, show me your list of products."

**GET is the default** - if you don't specify a method, cURL uses GET.

### POST - "Here's Some Information"

**Use case:** When you want to *send* data to the server (like submitting a form or creating something new).

Enter fullscreen mode Exit fullscreen mode


bash
curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{"title":"My Post","body":"Hello World","userId":1}'


This is like saying, "Hey, here's a new post I want you to save."

Let's break down that command:
- `-X POST` → Use the POST method
- `-H "Content-Type: application/json"` → I'm sending JSON data
- `-d '...'` → Here's the data I'm sending

**Simple analogy:**
- **GET** = Reading a book from a library (you don't change anything)
- **POST** = Submitting a form to add a new book to the library (you're creating something new)

---

## Step-by-Step: Your First POST Request

Let's create a new post on a practice API:

Enter fullscreen mode Exit fullscreen mode


bash
curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{"title":"Learning cURL","body":"This is my first POST request!","userId":1}'


You'll get a response like:

Enter fullscreen mode Exit fullscreen mode


json
{
"title": "Learning cURL",
"body": "This is my first POST request!",
"userId": 1,
"id": 101
}


**What just happened:**
1. You sent data to the server
2. The server received it
3. The server sent back confirmation (including an ID it assigned)

Congratulations! You just created something on a server using cURL! 🎊

---

## Making Requests Easier to Read

Sometimes responses are hard to read. Here are some helpful tricks:

### See Response Headers

Enter fullscreen mode Exit fullscreen mode


bash
curl -i https://jsonplaceholder.typicode.com/users/1


The `-i` flag shows you the headers (metadata) along with the body.

### Make JSON Prettier

If you have Python installed (most systems do):

Enter fullscreen mode Exit fullscreen mode


bash
curl https://jsonplaceholder.typicode.com/users/1 | python -m json.tool


This formats the JSON nicely with proper indentation.

### Save Response to a File

Enter fullscreen mode Exit fullscreen mode


bash
curl https://jsonplaceholder.typicode.com/users/1 > user.json


This saves the response to a file instead of printing it to your screen.

---

## Common Mistakes Beginners Make with cURL

Let's address some common pitfalls so you can avoid them:

### Mistake 1: Forgetting Quotes Around URLs with Special Characters

Enter fullscreen mode Exit fullscreen mode


bash

❌ Wrong

curl https://api.example.com/search?q=hello world

✅ Correct

curl "https://api.example.com/search?q=hello world"


**Why?** The terminal treats spaces as separators. Quotes keep the URL together.

### Mistake 2: Forgetting to Specify Content-Type for POST

Enter fullscreen mode Exit fullscreen mode


bash

❌ Won't work properly

curl -X POST https://api.example.com/users \
-d '{"name":"John"}'

✅ Correct

curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"John"}'


**Why?** The server needs to know what format you're sending data in.

### Mistake 3: Using Single Quotes on Windows

Windows command prompt handles quotes differently:

Enter fullscreen mode Exit fullscreen mode


bash

❌ Wrong on Windows

curl -d '{"name":"John"}' https://api.example.com/users

✅ Correct on Windows (use double quotes, escape inner quotes)

curl -d "{\"name\":\"John\"}" https://api.example.com/users


### Mistake 4: Not Checking Status Codes

Always check if your request succeeded:

Enter fullscreen mode Exit fullscreen mode


bash
curl -i https://api.example.com/users


Look for the status code in the first line:
- `200 OK` = Success!
- `404 Not Found` = That resource doesn't exist
- `500 Internal Server Error` = Something broke on the server

### Mistake 5: Giving Up After the First Try

cURL can be frustrating at first. It's normal! Keep these tips in mind:
- **Read error messages carefully** - they often tell you exactly what's wrong
- **Start simple** - get a basic GET request working before trying POST
- **Check your API documentation** - different APIs have different requirements
- **Use practice APIs** - jsonplaceholder.typicode.com is perfect for learning

---

## Where cURL Fits in Backend Development

Let's see where cURL sits in the bigger picture:

Enter fullscreen mode Exit fullscreen mode

┌─────────────────────────────────────────────────┐
│ FULL STACK APPLICATION │
├─────────────────────────────────────────────────┤
│ │
│ Frontend (Browser) │
│ ↓ Makes requests to... │
│ │
│ Your Backend API │
│ ↓ Might make requests to... │
│ │
│ External APIs (Weather, Payment, etc.) │
│ ← You test these with cURL! │
│ │
│ Database │
│ (stores data) │
│ │
└─────────────────────────────────────────────────┘


**How developers use cURL:**

1. **During Development:** Test if external APIs work before integrating them
2. **Debugging:** When something breaks, use cURL to isolate the problem
3. **API Documentation:** Understand how an API works by trying it with cURL first
4. **Automated Testing:** Write scripts that use cURL to test your API endpoints
5. **Server Monitoring:** Check if your server is responding correctly

---

## Quick Reference: Essential cURL Commands

Here's a cheat sheet for the commands we've learned:

Enter fullscreen mode Exit fullscreen mode


bash

Basic GET request

curl https://api.example.com/users

GET with response headers

curl -i https://api.example.com/users

POST with JSON data

curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"John","email":"john@example.com"}'

Save response to file

curl https://api.example.com/users > users.json

Format JSON nicely (requires Python)

curl https://api.example.com/users | python -m json.tool

Follow redirects

curl -L https://example.com

Show only response headers

curl -I https://api.example.com/users




---
Enter fullscreen mode Exit fullscreen mode

Top comments (0)