May 11, 2019

651 words 4 mins read

hazbo/httpu

hazbo/httpu

The terminal-first http client

repo name hazbo/httpu
repo link https://github.com/hazbo/httpu
homepage
language Go
size (curr.) 821 kB
stars (curr.) 612
created 2018-07-05
license GNU General Public License v2.0

httpu

httpu

httpu is a terminal first, general purpose HTTP client, designed to get you interacting with all aspects of an HTTP API within just a few seconds. This makes it a good tool for testing out various endpoints, methods, payloads - so you are able to see what’s being sent, and what response you are then getting.

Getting started

Installing

macOS

brew tap httpu/httpu
brew install httpu

Building from source

cd $GOPATH
mkdir -p src/github.com/hazbo
cd src/github.com/hazbo
git clone git@github.com:hazbo/httpu.git
cd httpu
make

Basic usage

I started writing this project whilst working with the Moltin API, which is a headless commerce API, so there are a few examples using that, if you want to play around with that, just head to the website, get your API keys and you are good to go!

Once httpu has been installed, you can get started either by first pulling down the preconfigured packages:

httpu pull

And then loading the configuration of a package into httpu like so:

httpu new moltin

or by creating your own configuration. A basic project may look like the following:

mkdir -p httpbin/requests
touch httpbin/project.json httpbin/requests/ip.json

httpbin/project.json

{
  "project": {
    "url": "https://nghttp2.org/httpbin",
    "resourceFiles": [
      "httpbin/requests/ip.json"
    ]
  }
}

httpbin/requests/ip.json

{
  "kind": "request",
  "name": "ip",
  "spec": {
    "uri": "/ip",
    "method": "GET"
  }
}

Once you have that setup, you’re ready to run httpu!

httpu new httpbin

When the UI has loaded, typing in ip (the name of the request) into the prompt, followed by hitting enter will run that request and you will be able to see the response body in the right-hand window. In this case, it will simply just return your IP address from which the request has been made.

Keybinding Description
Up Switch to command mode
Down Switch to default mode
Left Move cursor to request view
Right Move cursor to response view
Ctrl+w Move cursor from request / response view to the prompt
Ctrl+s Switch the cursor from request view to response view
Ctrl+c Quit

To see what commands are available, switch to command mode, then type in list-commands.

Advanced usage

httpu is able to look at a JSON response, take a given value and store it in memory, to then be used for another request. This in-memory store is called the stash. So for example, in the previous example, if you wanted to store the IP address that is returned, and use it else where, the request file may look like this:

httpbin/requests/ip.json

{
  "kind": "request",
  "name": "ip",
  "spec": {
    "uri": "/ip",
    "method": "GET",
    "stashValues": [
      {
        "name": "my-ip",
        "jsonPath": "origin"
      }
    ]
  }
}

and then in a seperate request you can then access it, once the ip request has been made, like so:

httpbin/requests/get.json

{
  "kind": "request",
  "name": "get",
  "spec": {
    "uri": "/get?ip=${stash[ip]}",
    "method": "GET"
  }
}

with ${stash[ip]} being a variable created after running the ip request.

For more examples for advanced usage including the stash, sending request data, using environment variables etc… head over to the packages repo and check out the example I’ve started creating for the Moltin API.

Coming soon

  • A view to display response headers (priority)
  • Creating a request flow
  • Creating tests for a request or set of requests
  • Various UI tweaks
  • An HTTP API interface

Known issues

This project is in its very early stages, so there will be things that need fixing. One issue at the moment is a problem with parsing stashed variables into request data before a request has been made. If this happens, and you are seeing ${stash[var_name]}, just fire the request again and it should work.

Contributing

  • Fork httpu
  • Create a new branch (git checkout -b my-feature)
  • Commit your changes (git commit)
  • Push to your new branch (git push origin my-feature)
  • Create new pull request
comments powered by Disqus