Skip to content

REST API Access With cURL

cURL Overview

cURL is an open-source Linux tool that allows your CLI to act as an HTTP client1 Think of cURL sort of like a text-based web browser that you can use to do things like:

  • Test and troubleshoot HTTP connectivity to a server.
  • Interact with REST APIs.
  • Download or upload files.
  • Test certificate validity.

cURL In Action

Because the native response format for cURL is unstructured text2, cURL typically is not part of programmatic workflows. However, cURL has a wide variety of use cases and is an essential part of your development skillset.

cURL Example

Here is a quick example of how cURL can make a REST API call to a free, public service that provides a REST API test platform:

  1. You can paste this cURL command in just about any Linux environment and press Enter or Return to send the request:

    Example cURL Command
    curl https://jsonplaceholder.typicode.com/posts/1
    
  2. The response from the server should look something like this:

    Example Server Response
    {
      "userId": 1,
      "id": 1,
      "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
      "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
    }
    

cURL Command Option Reference

cURL and a slew of configuration options, and you can find a reference for some of the more common options below:

cURL Command Options
Option Shorthand Purpose
--request -X HTTP request method - GET3, POST, PUT, PATCH, DELETE
--header -H HTTP client header(s) in key/value pairs - "Content:application/json"
--url <url> N/A Request URL
--cookie-jar <file_name> c Write session cookies to a local file
--cookie <file_name> -b Send session cookies stored in a local file
--data, --data-raw, and --data-urlencode -d HTTP request body, typically for POST, PUT, and PATCH methods
--include -i Display the response headers and response body in STDOUT
--head -I Display ONLY the response headers in STDOUT
--insecure -k Allow insecure or self-signed certificates (insecure TLS)
--location -L Follow HTTP 3XX redirect server responses
--output <file_name> -o <file_name> Write response to a file, instead of STDOUT
--user -u HTTP Basic Auth credentials in a key/value pair - "user_name:password"
--verbose -v Display detailed info for debugging (headers, TLS handshake messages, etc.)

Moving On

You have the basics of cURL now, and it's time to take a look at Python Requests. Click here to move to the next section.


  1. cURL supports many more protocols than HTTP, and those protocols are beyond the scope of this repository. ↩

  2. Tools like JQ, for example, can format JSON text into structured data. ↩

  3. Default, when omitted. ↩