16 releases

0.0.16 Oct 2, 2024
0.0.11 Aug 6, 2024
0.0.10 Jul 14, 2024
0.0.4 Feb 6, 2024
0.0.2 Dec 23, 2023

#43 in HTTP client

MIT license

135KB
3K SLoC

hitt

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

hitt example

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

Usage: hitt <COMMAND>

Commands:
  run          Send http requests
  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

Linux & MacOS

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/hougesen/hitt/releases/latest/download/hitt-installer.sh | sh

Windows

powershell -ExecutionPolicy ByPass -c "irm https://github.com/hougesen/hitt/releases/latest/download/hitt-installer.ps1 | iex"

Cargo

hitt can be installed using Cargo.

cargo install hitt --locked

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

npm/npx

You can install hitt using npm:

npm install -g hitt-cli

hitt-cli run hello-world.http

or run it directly using npx:

npx hitt-cli run hello-world.http

Homebrew

brew install hougesen/tap/hitt

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 requests

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 hitt 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 "$(hitt completions bash)"

Bash

Add the following to your .zshrc.

eval "$(hitt completions zsh)"

Fish

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

hitt completions fish | source

PowerShell

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

Invoke-Expression (&hitt completions powershell)

Elvish

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

eval (hitt 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

~14–32MB
~546K SLoC