Good tools make great craftsmen. Just as a sculptor owns a range of different chisels and hammers to remove the precise amount of marble at a time, we programmers need a repertoire of little helpers that will take the mundane tasks out of the way so we can focus on our art.
What makes a good programming tool? I say that it needs to be focused on doing whatever it was designed to do exceptionally well. Just exactly what you need, without compromises. There’s a whole lot of other things different people might expect from their tools and that’s why there are so many.
Surely, the sculptor would be able to get the statue done with just a one-size-fits-all chisel and hammer. It might be a bit rough, but still a beautiful piece. But it would probably take ages to complete, with periods of horrible frustration when carving the eyelids with a clearly inadequate tool.
If you’re doing back-end web development, httpie might be one of the tools that are just right for you.
What is it?
httpie is a command-line http client, much like cURL or wget. Written entirely in Python (using requests for the backend and pygments for syntax highlighting), it’s well portable to many platforms, including the big three: Windows, Linux and OSX.
The first version was published by Jakub Roztocil in 2012. And what really sets it apart is its user interface. It extends the basic functions of curl or wget with things like pretty-printing and syntax-highlighting that make all the difference. It recognises a few most-commonly used formats, such as JSON and HTML and processes the output accordingly. All that from the comfort of your terminal.
This is how it looks:
httpie is open-source, distributed under the terms of the BSD licence. Check out Jakub’s repository on Github to see the code and contribute!
Where do I get it?
The easiest way to get httpie is from PyPI using the following cross-platform command:
If you prefer using OS-level packaging instead, httpie is widely available as a package in many Linux distros and Homebrew for OSX too.
Check out all your options in the project’s README.
How it works?
The interface isn’t the simplest —— the http protocol has many things that need
to be covered, after all. But the design is intuitive and it makes sense in a
way that you’ll remember it the first time you look at it. See the synopsis of
http command below:
The only mandatory argument is the URL. Optionally, you can choose the
method and provide several request items —— additional parameters for your
requests. These might include extra headers, POST data, URL parameters, form
fields and more. The
http command also understands a variety of
that affect both how your request will and the response will be handled.
The most basic usage therefore looks like this (mind you, there’s no ie at the end of the command):
The method falls back to GET by default, as you would probably expect, and GitHub’s servers will be serving you the content of my website shortly after. The headers are printed out along with the response; pretty simple.
This is great, but httpie can do a whole lot more. You’ll appreciate the convenience, particularly when sending requests slightly more elaborate than the one above. Check out the following examples.
One of the things you can add to the request with request items are GET parameters. Use two equals signs between the name of the parameter and its value and httpie will take care of the rest.
The above command will produce something like this:
When sending JSON data with a POST request, you can specify key-value parts of the payload using a similar convention, but delimited with a single equals sign. When preceded by a colon, the value is interpreted as a non-string, allowing you to pass over numbers, arrays and even whole objects.
Here’s the output:
A colon on its own makes httpie interpret the particular request item as an additional header, attaching it to the request.
This is what I got in my terminal:
One of the many options allows you to get past basic auth as follows:
And here’s the output:
This was of course just the tip of the iceberg. Head over to the project’s
README or the
--help for more examples and detailed explanations.
Whether you need to automate parts of your workflow with a quick bash script or
test something while developing an API, httpie is a great addition to your
virtual toolbox. It can’t really do much more than
wget, but it’s a
whole lot nicer. Don’t use a large hammer for the eyelids, give
httpie a go!
Looking for more awesome tools? Check out my previous posts about ack and tco.