REST toolbox for the command-line hacker

I work with lots of REST services those days. RESTful services are easy to access and use because they’re based on well-known tech, this eliminates half of the tedious work. Unfortunatly the other tedious half is still here: interfacing. We still need to get and convert the data from the original format to the format we want. Lately I found two tools that help a great deal with HTTP and JSON: HTTPie and Jq. Today I’ll talk about HTTPie.

I used cURL for almost a decade to deal with HTTP from the command-line, as few month ago I heard about a command line client called HTTPie, that has a nice interface that totally makes sense:

$ http --form POST localhost:8000/handler foo=1 bar=hello

What does it do? It does a HTTP POST on localhost:8000/handler with the following body:

POST /handler HTTP/1.1
Host: localhost:8000
Content-Length: 15
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: HTTPie/0.8.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=utf-8


It’s exactly the kind of stuff I want. I often automate the common stuff away with a function, like this:

http() {
    # 1st parameter is the path, we pop it out of the parameter list
    local urlpath = "$1"; shift

    # since we use http has our function name we have to use `command' to
    # call the executable http and not the function
    command http --form POST "$urlpath" "$*"

# Do a POST with the following parameters: foo=1&bar=2
http /test foo=1 bar=2

If you’d rather submit JSON instead of an url-encoded form, replace the --form option with --json.

Give HTTPie a shot next time you want to talk with an HTTP service from the command line: it may take you less time to learn it from scratch than remember how to use cURL.