HTTPie: Human-Friendly HTTP Client for the API Era
HTTPie is a modern command-line HTTP client that makes it simple to interact with web services. Unlike traditional tools like curl, HTTPie uses a more intuitive syntax and comes with features such as syntax highlighting, formatted JSON output, and simple commands for tasks like file uploads and authentication. Whether you're testing an API or debugging HTTP requests, HTTPie is designed to make your life easier.
Installation
HTTPie is available on multiple platforms. Here are the most common installation methods:
Using pip (Python Package Index)
If you have Python installed, you can install HTTPie with:
pip install httpie
On macOS using Homebrew
For macOS users, Homebrew provides a quick installation route:
brew install httpie
On Linux
Most Linux distributions offer HTTPie in their package managers. For example, on Debian/Ubuntu:
sudo apt-get install httpie
Alternatively, using pip (recommended for the latest version):
pip install --upgrade httpie
On Windows
For Windows users, you can install HTTPie via pip in a Command Prompt or PowerShell:
pip install httpie
Basic Usage
HTTPie’s syntax is designed to be simple and intuitive. The general structure is:
http [METHOD] URL [ITEM [ITEM]]
GET Request
To perform a GET request, simply run:
http GET https://httpbin.org/get
The response should look similar to:
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 295
Content-Type: application/json
Date: Sat, 15 Mar 2025 16:43:06 GMT
Server: gunicorn/19.9.0
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "HTTPie/3.2.4",
"X-Amzn-Trace-Id": "Root=1-67d5ae1a-311cca7e1181ebf347615f01"
},
"origin": "73.193.52.7",
"url": "https://httpbin.org/get"
}
Since GET is the default method, you can also omit it:
http https://httpbin.org/get
POST Request
For a POST request with JSON data, you can include key-value pairs:
http POST https://httpbin.org/post name=John age:=30
Note: The := operator is used to pass a number (or a JSON object/array) instead of a string.
Other HTTP Methods
You can specify other methods like PUT, PATCH, or DELETE in a similar way:
http PUT https://httpbin.org/put name=John age:=30
http DELETE https://httpbin.org/delete
Sending Data
HTTPie makes it easy to send different types of data with your requests.
Sending JSON
By default, HTTPie sends data as JSON when you provide key-value pairs. For example:
http POST https://api.example.com/users username=johndoe active:=true
This sends a JSON payload:
{
"username": "johndoe",
"active": true
}
Sending Form Data
If you need to send form-encoded data, you can explicitly specify it:
http --form POST https://api.example.com/login username=johndoe password=secret
Sending Raw Data
For raw data or when the automatic JSON detection isn’t desired, you can use the --raw flag:
http --raw POST https://api.example.com/rawdata "raw body text"
Customizing Requests
HTTPie offers several options to customize your HTTP requests.
Custom Headers
Add headers easily by specifying the header name followed by a colon:
http GET https://httpbin.org/get 'User-Agent:HTTPie'
Query Parameters
Simply add query parameters to the URL or as additional arguments:
http GET https://api.example.com/search q==HTTPie
The == syntax ensures the value is sent as a query parameter without JSON encoding.
Verbosity and Debugging
For detailed output including request headers, use:
http -v GET https://httpbin.org/get
For even more detailed debugging information, you can add multiple -v flags.
Authentication
HTTPie supports various authentication methods directly from the command line.
Basic Authentication
For basic auth, use the -a flag with username:password:
http -a username:password GET https://api.example.com/secure-endpoint
Bearer Token
To send a bearer token, you can manually add the header:
http GET https://api.example.com/secure-endpoint 'Authorization:Bearer YOUR_TOKEN'
There’s also support for other authentication schemes and even plugins if needed.
File Uploads and Downloads
HTTPie makes file uploads straightforward.
Uploading Files
Use the @ symbol to upload a file. For example, to upload an image:
http --form POST https://api.example.com/upload file@/path/to/image.jpg
Downloading Files
To download a file, use the --download (or -d) flag:
http --download GET https://example.com/file.zip
This will save the file with its original name (or you can specify a name using the --output flag).
Advanced Options and Scripting
HTTPie’s flexibility makes it ideal for scripting and automating API calls.
Saving Output
You can direct the output to a file using shell redirection:
http GET https://httpbin.org/get > response.json
Environment Variables and Configuration
HTTPie supports configuration files that let you set default options for all your requests. Create a file at ~/.httpie/config.json and include your default settings:
{
"default_options": ["--timeout=30"],
"default_headers": {
"User-Agent": "HTTPie"
}
}
Using with Shell Scripts
You can embed HTTPie commands within shell scripts to automate repetitive tasks. For example:
#!/bin/bash
# A simple script to check the status of an API
API_URL="https://api.example.com/status"
RESPONSE=$(http --check-status GET $API_URL)
echo "API Response:"
echo "$RESPONSE"
Make your script executable and run it as needed.
Tips, Tricks, and Troubleshooting
Tips
Troubleshooting
HTTPie streamlines the process of interacting with APIs from the command line. Its intuitive syntax, powerful features, and extensive customization options make it a great tool for developers, QA engineers, and system administrators alike. Whether you’re making simple GET requests or scripting complex interactions, HTTPie is a reliable companion in the API era.
?