18 comments

[ 3.3 ms ] story [ 54.3 ms ] thread
I'm just starting to get into Python and using the command line more after a lifetime of mostly sticking to GUIs, and I'm really digging the "software for humans" vibe I'm finding in a few places. HTTPie is a good example, as is ncdu, which I just discovered this morning. Also anything by Kenneth Reitz.

The command line can be great for commanding, when it's done right, but it's not so great for most kinds of visualization, so CLI software that recognizes that and tries to compensate really helps.

HTTPie is great! I’ve replaced curl with it in my daily workflow
HTTPie is awesome, the only thing to watch out for is if you use it for large JSON responses, it can take a while to parse, process and display the response. In that case cURL is still handier, but HTTPie is the tool I generally reach for
If you like httpie, http-prompt is a good add on for it, it lets you navigate through a rest API as if it is a filesystem (using cd for navigation), and lets you configure the arguments to pass to httpie for future requests.
Love Httpie! Such an awesome cli with easy to remember, natural syntax. When installing on new boxes I wish it wasn't depending on python though.
Could we all just agree to stop using the adjective “modern”? It’s such a weasal word. If there are advantages to your program, describe them. Simply being “newer” or in the currently trendy style does not make it automatically better.

I’m not saying that this is a bad project. But “modern” doesn’t tell me anything about why I might want to use it.

Well, i use it daily, because it has:

- much more sane command line syntax

- automatic formatting and highlighting of json/xml/html

- automatically show received headers

- reverts to unproccessed output when redirected

PROTIP: use 'cat' to type the body manually:

     cat | http post https://someapi.com/somenendpoint Authorization:sometoken
You can then start typing the message body. When done, press ctrl+d (EOF) and the request will send and the reply will be printed.

And if you already have the body in a separate file, just pipe it through:

    cat mybody.json | http post https://someapi.com/somenendpoint Authorization:sometoken
Don't need cat for the last one, can you redirected input

  http post https://someapi.com/somenendpoint Authorization:sometoken < mybody.json
And if you are like me, you use cat because it can go first in the command line... Until I discovered that file redirects can too!

<mybody.json http post https://someapi.com/somenendpoint Authorization:sometoken

Can you tell us what you think would be an appropriate 4-6 word tagline for HTTPie?
OK, we've s/modern//'d the title above.
It looks cool, but I don't really want to wait half a minute for it to do anything.

  $ time curl cs.marlboro.college
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>301 Moved Permanently</title>
  </head><body>
  <h1>Moved Permanently</h1>
  <p>The document has moved <a href="https://cs.marlboro.college  /">here</a>.</p>
  <hr>
  <address>Apache/2.4.18 (Ubuntu) Server at cs.marlboro.college Port 80</address>
  </body></html>

  real	0m0.269s
  user	0m0.004s
  sys	0m0.005s
  
  $ time http cs.marlboro.college
  HTTP/1.1 301 Moved Permanently
  Connection: Keep-Alive
  Content-Length: 321
  Content-Type: text/html; charset=iso-8859-1
  Date: Sat, 27 Jan 2018 18:04:17 GMT
  Keep-Alive: timeout=5, max=100
  Location: https://cs.marlboro.college/
  Server: Apache/2.4.18 (Ubuntu)
  
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>301 Moved Permanently</title>
  </head><body>
  <h1>Moved Permanently</h1>
  <p>The document has moved <a href="https://cs.marlboro.college/">here</a>.</p>
  <hr>
  <address>Apache/2.4.18 (Ubuntu) Server at cs.marlboro.college Port 80</address>
  </body></html>

  real	0m30.553s
  user	0m0.437s
  sys	0m0.052s
On my computer httpie took 0.775s, and curl took 0.105s, so not much slower.
I use httpie to view request and response headers. Very handy when you want to check something without worrying that a browser is caching something for some reason (like a redirect).

  $ http --print Hh http://news.ycombinator.com
Httpie is my version of Postman and similar services, curl for humans is spot on imho.