simple, intuitive HTTP REPL — Speak HTTP like a local.
Pull request Compare This branch is 28 commits ahead, 24 commits behind cloudhead:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
LICENSE Initial commit. May 31, 2010
package.json Bump to version 0.7.0 Jul 12, 2016


Speak HTTP like a local

Talking to an HTTP server with curl can be fun, but most of the time it's a PITA.

http-console is a simple and intuitive interface for speaking the HTTP protocol.

PS: HTTP has never been this much fun.




http-console 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 in /usr/local/bin.

Installing the bleeding edge

The latest release will often be available on npm as http-console@latest, so you can run:

$ npm install http-console2@latest -g

Alternatively, you can download a tarball of this repo, or clone it. Just make sure you have the latest version of node.


Let's assume we have a CouchDB instance running locally.


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

$ http-console 


Once connected, we should see the http prompt:>

server navigation is similar to directory navigation, except a little simpler:> /logs> /46> ..> ..>


HTTP requests are issued with the HTTP verbs GET, PUT, POST, HEAD and DELETE, and a relative path:> GET /
HTTP/1.1 200 OK
Date: Mon, 31 May 2010 04:43:39 GMT
Content-Length: 41

    couchdb: "Welcome",
    version: "0.11.0"
}> GET /bob
HTTP/1.1 404 Not Found
Date: Mon, 31 May 2010 04:45:32 GMT
Content-Length: 44

    error: "not_found",
    reason: "no_db_file"

When issuing POST and PUT commands, we have the opportunity to send data too:> /rabbits> POST
... {"name":"Roger"}

HTTP/1.1 201 Created
Date: Mon, 31 May 2010 05:09:15 GMT
Content-Length: 95

    ok: true,
    id: "2fd9db055885e6982462a10e54003127",
    rev: "1-0c3db91854f26486d1c3922f1a651d86"

Make sure you have your Content-Type header set properly, if the API requires it. More in the section below.

Note that if you're trying to POST to a form handler, you'll most probably want to send data in multipart/form-data format, such as name=roger&hair=black. http-console sends your POST/PUT data as is, so make sure you've got the format right, and the appropriate Content-Type header.

setting headers

Sometimes, it's useful to set HTTP headers:> Accept: application/json> X-Lodge: black

These headers are sent with all requests in this session. To see all active headers, run the .headers command:> .headers
Accept: application/json
X-Lodge: black

Removing headers is just as easy:> Accept:> .headers
X-Lodge: black

Because JSON is such a common data format, http-console has a way to automatically set the Content-Type header to application/json. Just pass the --json option when starting http-cosnole, or run the .json command:

$ http-console --json> .headers
Accept: */*
Content-Type: application/json


You can enable cookie tracking with the --cookies option flag. To see what cookies are stored, use the .cookies command.


To enable SSL, pass the --ssl flag, or specify the address with https.

quitting> .q

nuff' said.