Skip to content

mmalecki/http-console2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

http-console2

Speak HTTP like a local

http-console2 aims to be a user-friendly, REPL-based HTTP API explorer. In addition to sending basic requests, it supports:

Installation

http-console2 was written for node, so make sure you have that installed first. Then you need npm, node's package manager.

Once you're all set, run:

$ npm install http-console2 -g 

It'll download the dependencies, and install the command-line tool.

Docker

You can also run this application as a Docker container, for example:

$ docker run -it mmalecki/http-console2 --insecure https://172.17.0.2:6443 ... https://172.17.0.2:6443> get / 

Usage

Let's assume we have an HTTP API server running on port 8000.

Connecting

To connect, we run http-console, passing it the server host and port as such:

$ http-console 127.0.0.1:8000 

Optionally, you can also specify the protocol:

$ http-console https://127.0.0.1:8433 

You can also enable JSON parsing and sending from the get-go:

$ http-console --json https://127.0.0.1:8001 

Once connected, you'll see the prompt:

http://127.0.0.1:8000> 

Making requests

You can make HTTP requests by using their HTTP verb, for example:

http://127.0.0.1:8000> get / HTTP/1.1 200 OK content-type: application/json date: Thu, 16 Jan 2020 04:18:16 GMT connection: close transfer-encoding: chunked { hello: 'world' } http://127.0.0.1:8000> get /foo HTTP/1.1 404 Not Found content-type: text/plain; charset=utf-8 content-length: 9 date: Thu, 16 Jan 2020 04:18:59 GMT connection: close 'Not Found' 

You can also send POST/PUT/PATCH/DELETE/etc. requests:

http://127.0.0.1:8000> POST /rabbits ... {"name":"Roger"} HTTP/1.1 201 Created content-type: application/json content-length: 62 date: Thu, 16 Jan 2020 04:55:22 GMT connection: close { uuid: '61568573-72c3-4cfe-8440-8777fd3a76fc', name: 'Roger' } 

Multiline JSON bodies

Editing larger JSON object in a single line quickly turns into a nightmare. That's why http-console supports multiline JSON bodies:

http://127.0.0.1:8000> post /pet-hotel ... { ... "meta": { ..... "name": "Roger", ..... "kind": "Rabbit", ..... "breed": "Super Fluffy 1000" ..... } ... } HTTP/1.1 201 Created content-type: application/json content-length: 62 date: Thu, 16 Jan 2020 04:55:22 GMT connection: close { uuid: '61568573-72c3-4cfe-8440-8777fd3a76fc' } 

Ctrl + C will exit multiline JSON body mode and get you back to the prompt.

Setting headers

Sometimes, it's useful to set HTTP headers:

http://127.0.0.1:8000> Accept: application/json http://127.0.0.1:8000> X-Lodge: black 

These headers are sent with all requests in this session. To see all active headers, run the .headers command:

http://127.0.0.1:8000> .headers Accept: application/json X-Lodge: black 

Removing headers is just as easy:

http://127.0.0.1:8000> Accept: http://127.0.0.1:8000> .headers X-Lodge: black 

Per-origin command and request body histories

http-console2 not only remembers the commands and request bodies you sent, it also remembers where you sent them. Therefore, when you use the arrow-up history, only commands and bodies sent to the server you're chatting to will be presented.

Alternatively, you can use a named history (which is useful when you're connecting to two different servers that consume the same protocol):

$ http-console --history rabbits 127.0.0.1:8000 http://127.0.0.1:8000> get /rabbits ... http://127.0.0.1:8000> ^D $ http-console --history rabbits https://api.rabbitshq.com https://api.rabbitshq.com> <Arrow-Up> https://api.rabbitshq.com> get /rabbits 

You can further automate named histories using contexts.

History-based tab completion is also provided.

OpenAPI-based autocompletion

If the API you're chatting with supports OpenAPI, http-console2 can discover the specification and offer autocompletion suggestions based on it.

To enable OpenAPI support, launch http-console2 with the --openapi switch (and --json, when appropriate):

$ http-console --openapi --json 127.0.0.1:8001 

http-console2 will then try to autodiscover the API specification under the following URLs:

  • /openapi.json
  • /openapi/v1
  • /openapi/v2

You can also explicitly set the specification endpoint:

$ http-console --openapi --openapi-spec /v1/openapi.json --json 127.0.0.1:8001 

If the specification discovery succeeds, you'll be able to use autocompletion when typing in the method and the URL:

http://127.0.0.1:8001> get /apis/apps/v1/d<TAB> get /apis/apps/v1/daemonsets get /apis/apps/v1/deployments 

Contexts

Contexts allow http-console2 to match the server it's pointed at to a set of settings.

So, for example, say you know that 127.0.0.1:8000 and its remote counterpart serve JSON and use OpenAPI. You also want them to share the same history file. You can place the following in your ~/.http-console2/contexts.json:

{ "rabbits": { "urls": ["http://127.0.0.1:8000", "https://api.rabbitshq.com"], "openapi": true, "json": true, "history": "rabbits" } } 

and from now on, when you run http-console http://127.0.0.1:8000 or http-console https://api.rabbitshq.com, it'll be as if you ran http-console --openapi --json --history rabbits <url>.

You can also configure which context to use explicitly: http-console --ctx rabbits http://127.0.0.1:8000.

Quitting

Ctrl + D to exit, as you would the usual Node REPL.

Tips & tricks

REPL

http-console2 employs node.js's core repl module, which means you can .load and .save scripts.

See also

About

simple, intuitive HTTP REPL — Speak HTTP like a local.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 98.7%
  • Dockerfile 1.3%