10 releases

0.0.10 Jul 14, 2024
0.0.9 Jun 8, 2024
0.0.6 May 20, 2024
0.0.5 Apr 2, 2024
0.0.2 Dec 23, 2023

#35 in HTTP client

Download history 161/week @ 2024-03-31 8/week @ 2024-04-07 148/week @ 2024-05-19 3/week @ 2024-05-26 364/week @ 2024-06-02 50/week @ 2024-06-09 4/week @ 2024-06-16 10/week @ 2024-06-30 118/week @ 2024-07-14

128 downloads per month

MIT license

135KB
3K SLoC

hitt

hitt is a command line HTTP testing tool focused on speed and simplicity.

hitt example

hitt 0.0.10
command line HTTP testing tool focused on speed and simplicity
Mads Hougesen <mads@mhouge.dk>

Usage: hitt <COMMAND>

Commands:
  run          Send http request
  sse          Listen to sse events
  completions  Generate shell completions
  help         Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Install

hitt can be installed using Cargo.

cargo install hitt --locked

If you do not have Cargo installed, you need to install it first.

Dependencies

hitt does not require any external dependencies for Windows and macOS user.

Linux users must install openssl.

Debian and Ubuntu

sudo apt-get install pkg-config libssl-dev

Arch Linux

sudo pacman -S pkg-config openssl

Fedora

sudo dnf install pkg-config perl-FindBin openssl-devel

Alpine Linux

apk add pkgconfig openssl-dev

openSUSE

sudo zypper in libopenssl-devel

Usage

To send a request create a file ending in .http.

The syntax of .http files is pretty straightforward:

GET https://mhouge.dk/

The file can then be run using the following command:

hitt run PATH_TO_FILE

That is all that is need to send a request.

Send http request

Usage: hitt run [OPTIONS] <PATH>

Arguments:
  <PATH>  Path to .http file, or directory if supplied with the `--recursive` argument

Options:
      --timeout <TIMEOUT_MS>  Request timeout in milliseconds
      --var <KEY>=<VALUE>     Variables to pass to request
  -r, --recursive             Enable to run directory recursively
      --fail-fast             Exit on error response status code
      --hide-body             Whether or not to show response body
      --hide-headers          Whether or not to show response headers
      --disable-formatting    Disable pretty printing of response body
  -h, --help                  Print help
  -V, --version               Print version

Arguments

Argument Description
--var <KEY>=<VALUE> Variables to pass to request
--recursive Run all files in directory
--fail-fast Exit on status code 4XX or 5xx
--hide-headers Hide response headers
--hide-body Hide response body
--timeout <TIMEOUT_MS> Request timeout in ms

Request headers

Request headers can be added by writing key value pairs (KEY:VALUE) on a new line after the method and URL:

GET https://mhouge.dk/
key:value

Leading spaces in the header value is ignored, so KEY: VALUE and KEY:VALUE will both have the value VALUE.

Request body

A body can be sent with the request by creating a blank line, followed by the desired body input.

Please note, hitt does not infer content type. That has to be written as a header.

POST https://mhouge.dk/
content-type:application/json

{
    "key": "value"
}

Multiple request in single file

Multiple requests can be written in a single file by adding a line with ### as a separator:

GET https://mhouge.dk/

###

GET https://mhouge.dk/

Variables

hitt has support for request variables.

A variable can be set in a file using the following syntax @name = VALUE. Whitespace is ignored.

Variables are used by wrapping the name in curly brackets ({{ name }}).

@variable_name = localhost

GET {{ variable_name }}/api

In-file variables are not shared between other files.

Variable arguments

Variables can be passed to all requests using the --var <KEY>=<VALUE> argument:

# file.http

GET {{ host }}/api

The file can the be run:

hitt run --var host=localhost:5000 file.http

Server sent events (SSE)

A SSE listener can be started using the hitt sse command.

hitt sse https://sse.dev/test
Listen to sse events

Usage: hitt sse <URL>

Arguments:
  <URL>

Options:
  -h, --help     Print help
  -V, --version  Print version

Shell completions

Shell completions can be generated using mdsf completions <SHELL>.

Generate shell completions

Usage: hitt completions <SHELL>

Arguments:
  <SHELL>  [possible values: bash, elvish, fish, powershell, zsh]

Options:
  -h, --help     Print help
  -V, --version  Print version

Bash

Add the following to your .bashrc.

eval "$(mdsf completions bash)"

Bash

Add the following to your .zshrc.

eval "$(mdsf completions zsh)"

Fish

Add the following to ~/.config/fish/config.fish.

mdsf completions fish | source

PowerShell

Add the following to your PowerShell configuration (Can be found by running $PROFILE).

Invoke-Expression (&mdsf completions powershell)

Elvish

Add the following to ~/.elvish/rc.elv.

eval (mdsf completions elvish)

Neovim

hitt can be run directly from Neovim.

[!NOTE] The hitt executable must be available in your path for the plugin to work.

Install

Lazy

local hitt_plugin = {
    "hougesen/hitt",
    opts = {},
}

Usage

The plugin exposes a single command :HittSendRequest, which can be bound to a keymap like this:

-- ~/.config/nvim/after/plugin/hitt.lua

local hitt = require("hitt")

vim.keymap.set("n", "<leader>rr", hitt.HittSendRequest, {})

hitt neovim window

Configuration

Name Default Description
window_width 80 Window width in percentage
window_height 80 Window height in percentage
fail_fast false Enables the --fail-fast options

HTTP syntax highlighting

Syntax highlighting can be enabled by installing the http treesitter parser (:TSInstall http) and adding a file association for .http files.

vim.filetype.add({
    extension = {
        http = "http",
    },
})

Disclaimer

hitt is most likely not ready for main stream usage. I (Mads Hougesen) am primarily developing it based on features I believe to be useful, or fun to develop.

Dependencies

~12–26MB
~390K SLoC