Course – LS (cat=HTTP Client-Side)

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Overview

In this tutorial, we’ll learn how to use the HTTPie CLI tool.

2. What Is HTTPie?

HTTPie is a command-line HTTP client created for interacting with HTTP servers and APIs. In addition, HTTPie can also be used for testing and debugging.

Moreover, it features formatted and colorized output, intuitive syntax, and built-in JSON support.

3. Installation

First, we need to install it:

3.1. On Linux

We can install HTTPie on Linux using Snapcraft:

$ sudo snap install httpie

3.2. On Windows

To install it on Windows, we can use Chocolatey:

$ choco install httpie

3.3. On macOS

Finally, to install it on macOS, we can use Homebrew:

$ brew update
$ brew install httpie

4. Usage

We should call HTTPie in this general pattern:

http [flags] [METHOD] URL [ITEM [ITEM]]

or:

https [flags] [METHOD] URL [ITEM [ITEM]]

5. Examples

Let’s see a few examples:

5.1. Hello World

A simple hello world GET request:

$ https httpie.io/hello
HTTP/1.1 200 OK
Age: 0
Cache-Control: public, max-age=0, must-revalidate
Connection: keep-alive
...

{
    "ahoy": [
        "Hello, World! 👋 Thank you for trying out HTTPie 🥳",
        "We hope this will become a friendship."
...
}

We get the response header and body as output.

5.2. Adding Custom HTTP Method, HTTP Headers, and Body

We can also specify the method and add custom items to the request:

$ http PUT httpbin.org/put X-API-Token:123 name=John
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
...
Server: gunicorn/19.9.0

{
    "args": {},
    ...
    "headers": {
        ...
        "X-Api-Token": "123"
    },
    "json": {
        "name": "John"
    },
    ...
}

To clarify, PUT is the method, X-API-Token:123 is a custom HTTP header, and name=john is a custom data item.

5.3. Submitting Forms

We can also submit form data if we add the -f flag:

$ http -f POST httpbin.org/post hello=world
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
...
Server: gunicorn/19.9.0

{
    "args": {},
    ...
    "form": {
        "hello": "world"
    },
    ...
}

We can see that the HTTP response contains the form data that we specified.

5.4. Outputting the Request

To output the request as well as the response, we can add -v, which stands for verbose output:

$ http -v httpbin.org/get
GET /get HTTP/1.1
Accept: */*
...
User-Agent: HTTPie/3.2.1


HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
...
Server: gunicorn/19.9.0

{
    "args": {},
    "headers": {
        "Accept": "*/*",
        ...
}

The output contains both the request and the response.

5.5. Uploading a File

We can also pass a file as request data:

$ http httpbin.org/post < hello.json
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
...
Server: gunicorn/19.9.0

{
    "args": {},
    "data": "{\"ahoy\":[\"Hello, World! 👋 Thank you for trying out HTTPie 🥳\",\"We hope this will become a friendship.
    ...
    "json": {
        "ahoy": [
            "Hello, World! 👋 Thank you for trying out HTTPie 🥳",
            "We hope this will become a friendship."
        ],
        "links": {
            ...
        }
    },
    ...
}

5.6. Downloading a File

We can download a file and redirect the output:

$ http httpbin.org/image/png > image.png

In addition, we can also download a file wget style:

$ http --download httpbin.org/image/png
HTTP/1.1 200 OK
...
Server: gunicorn/19.9.0

Downloading to png.png
Done. 8.1 kB in 00:0.06310 (128.2 kB/s)

6. Summary

In this article, we learned how to install and use the HTTPie CLI tool.

Course – LS (cat=HTTP Client-Side)

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – HTTP Client (eBook) (cat=Http Client-Side)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.