Metadata-Version: 2.4
Name: runhttp
Version: 0.1.0
Summary: Run .http files (VS Code REST Client format) from the command line. Zero dependencies — a tiny, unbloated alternative to Postman.
Author: yyfjj
License: MIT
Project-URL: Homepage, https://github.com/jjdoor/runhttp-py
Project-URL: Repository, https://github.com/jjdoor/runhttp-py
Project-URL: Issues, https://github.com/jjdoor/runhttp-py/issues
Keywords: http,rest-client,http-client,rest,api,api-testing,dothttp,curl,cli,vscode-rest-client,devtools
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Utilities
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# runhttp

**Run `.http` files from the command line.** You already have `.http` files —
the ones VS Code's REST Client extension runs. `runhttp` runs the *same files*
in your terminal and in CI. **Zero dependencies**, no Electron, no account, no
config.

```http
# api.http
@base = https://api.example.com
@token = {{$env API_TOKEN}}

### Get the current user
GET {{base}}/me
Authorization: Bearer {{token}}
Accept: application/json
```

```bash
runhttp api.http
```

```
GET https://api.example.com/me   # Get the current user
  200 OK · 142ms · application/json · 318 B
  {
    "id": 7,
    "name": "Ada Lovelace"
  }
```

## Why

You want to fire off a saved HTTP request and see the response. The options:

- **Postman / Insomnia** — a whole GUI app and an account, to send one GET.
- **Hurl** is great, but uses its own `.hurl` format — your existing VS Code
  `.http` files don't run in it.
- **httpyac** runs `.http` files but pulls in **dozens of dependencies**.
- **curl** works, but now you're translating a clean `.http` file into a wall
  of `-H` flags every time.

`runhttp` runs the `.http` files you already keep next to your code. Pure
standard library — `pipx`/`npx` and go.

## Usage

```bash
runhttp api.http               # run every request in order
runhttp api.http -n 2          # run only request #2 (1-based)
runhttp api.http --name login  # run the request titled "### login"
runhttp api.http --list        # list requests without sending
cat api.http | runhttp         # read from stdin
```

| Option | |
|---|---|
| `-n, --request <n>` | run only the nth request |
| `--name <title>` | run the request with this `###` title / `# @name` |
| `--list` | print requests, don't send |
| `--var k=v` | define/override a variable (repeatable) |
| `-i, --include` | print response headers |
| `--json` | emit results as a JSON array (stdout) |
| `--no-follow` | don't follow redirects (default: follow, max 5) |
| `--insecure` | skip TLS verification |
| `--timeout <sec>` | per-request timeout (default 30) |

### Variables

```http
@base = https://api.example.com      # file variable
GET {{base}}/users                   # {{name}} to use it
Authorization: Bearer {{$env TOKEN}} # {{$env NAME}} reads the environment
```

Override or supply any variable from the command line with `--var name=value`.
An **undefined** variable is an error — a typo never gets silently sent.

### Exit codes

```
0   every request came back < 400
1   some request returned an HTTP status >= 400
2   parse error, connection failure, or bad usage
```

```bash
runhttp smoke.http && echo "all endpoints healthy"
```

## Scope (on purpose)

Supports the everyday `.http`: `@variables`, `{{vars}}` / `{{$env}}`, request
titles, headers, request bodies, multiple requests per file, and redirect
following. It does **not** do gRPC/WebSocket/GraphQL transports or response
assertions — if you need those, reach for httpyac or Hurl. `runhttp` is the
small, dependency-free one for the 90% case.

## Install

```bash
pip install runhttp        # Python >= 3.8
npx runhttp api.http       # Node >= 18 (byte-for-byte port)
```

- PyPI: https://pypi.org/project/runhttp/
- npm: https://www.npmjs.com/package/runhttp
- GitHub: https://github.com/jjdoor/runhttp-py · [runhttp (Node)](https://github.com/jjdoor/runhttp)

## License

MIT
