# Getting Started with cURL

# What is cURL (in very simple terms)

**cURL** is a **small computer tool** that you can run in a *command line* (like Terminal on macOS/Linux or Command Prompt on Windows) to **send and receive data over the internet**. You tell it a web address (URL), and it goes there to **download something** (like a webpage or file) or **send information** to a server.

# **Why Programmers Use cURL**

**1\. To directly talk to servers**

Programmers often need to ask a server for data or send it data. cURL lets them **send requests and see responses right from the terminal (no browser needed)**. It’s like a *direct phone line to a server*.

**2\. Easy API Testing**

When building software that uses APIs, developers use cURL to quickly check if an API is working and what data it returns — **before writing any actual program code**.

**3\. Automating Tasks**

cURL can be used in scripts to do repetitive jobs automatically — like checking a website, downloading files, or fetching new data each day without clicking anything.

**4\. Debugging Problems**

When something goes wrong with a web app, programmers use cURL to see exactly what the server is returning — including errors — which helps **find bugs faster**.

**5\. Works in Many Environments**

You can run cURL on *almost any system* (Linux, macOS, Windows) and even on servers without graphical interfaces — so it’s super versatile.

**6\. Universal Tool for Web Requests**

# Making your first request using cURL

Instead of learning how to make web requests in every programming language, programmers can use cURL as a **universal way to demonstrate and test those requests**.

**make your first request using cURL** :

---

### **1\. Open your terminal / command line**

* On **macOS or Linux**: open **Terminal**
    
* On **Windows**: open **Command Prompt** or **PowerShell**
    

---

### 📡 **2\. Type this command and press Enter:**

```bash
curl <https://example.com>

```

That’s it! You just told cURL to fetch the webpage at [`example.com`](http://example.com).

# Understanding request and response

## **What is a Request?**

A **request** is a message your **computer or program sends to a server** asking for something — like a web page, an image, or some data.

* For example, when you type a website into your browser, it sends a **request** to the server where that site lives.
    
* This request tells the server what *you want* and how you want it.
    
* The request usually includes:
    
    * A **method** (like GET to fetch data)
        
    * The **URL** of what you want
        
    * Sometimes extra info (like headers or data you’re sending)
        

## **What is a Response?**

A **response** is what the **server sends back** after it gets and processes your request.

* It tells you whether your request worked or not.
    
* It also usually includes the **actual data you asked for** — like the code for a webpage, some JSON data, or an image.
    
* It has a **status** that says if everything was OK or if there was an error (like 200 OK, or 404 Not Found).
    
    # Using cURL to talk to APIs
    
    ## 🛠️ **What you’re doing with cURL + APIs**
    
    When you use cURL with an API, you’re **sending an HTTP request** to a server and getting back a **response with data** — usually in JSON. APIs often let you **get (read), send (create), update, or delete data**.
    
    # Common mistakes beginners make with cURL
    
    ### Forgetting the protocol
    
    Beginners sometimes write just [`example.com`](http://example.com) instead of including `http://` or `https://`.
    
    Always include the full URL (with `https://`) so cURL knows where to go.
    
    ### 2\. Putting options in the wrong place or using wrong dashes
    
    If you put options **after** the URL or use a wrong dash character (`–` instead of `--`), cURL can throw errors like “no URL specified.”
    
    Put options *before* the URL and use the correct `--` for long flags.
    
    ### 3\. Missing required headers
    
    When calling APIs, beginners often forget things like `Content-Type: application/json` or `Authorization:` headers.
    
    Include necessary headers so the server knows what you’re sending.
    
    ### 4\. Sending JSON without `d`
    
    You might write JSON data but forget `-d`, so **no body is actually sent**.
    
    Always use `-d` with JSON data and wrap it correctly (single quotes help in many terminals).
    
    ### 5\. Copying huge commands without understanding
    
    Copy-pasting long complex examples from the internet without knowing what each part does can lead to confusing errors.
    
    Start with simple commands and add options one at a time as you learn.
