# HTTPie — Moderner HTTP-Client für die Kommandozeile

> Praxis-Guide zu HTTPie — HTTP-Requests, JSON-Daten, Sessions und Authentifizierung auf der Kommandozeile, mit intuitiver Syntax und Beispielen für API-Testing.

Source: https://www.jpkc.com/db/cheatsheets/networking/httpie/

<!-- PROSE:intro -->
HTTPie ist die moderne, benutzerfreundliche Alternative zu curl: Statt kryptischer Flags formulierst du HTTP-Requests in einer intuitiven Syntax, die sich fast wie natürliche Sprache liest. JSON-Daten sendest du ohne Extra-Header per `key=value`-Notation, die Ausgabe ist automatisch eingefärbt und formatiert. Ob schneller API-Test, Bearer-Token-Auth oder wiederverwendbare Sessions – HTTPie macht das, was curl kann, deutlich zugänglicher.
<!-- PROSE:intro:end -->

## Grundlegende Anfragen

`http <url>` — Sendet einen GET-Request (Standard-Methode).

```bash
http https://api.example.com/users
```

`http POST <url>` — Sendet einen POST-Request.

```bash
http POST https://api.example.com/users
```

`http PUT <url>` — Sendet einen PUT-Request.

```bash
http PUT https://api.example.com/users/1
```

`http DELETE <url>` — Sendet einen DELETE-Request.

```bash
http DELETE https://api.example.com/users/1
```

`http PATCH <url>` — Sendet einen PATCH-Request.

```bash
http PATCH https://api.example.com/users/1
```

`http HEAD <url>` — Sendet einen HEAD-Request (nur Header).

```bash
http HEAD https://example.com
```

## Daten & JSON

`http POST <url> <key>=<value>` — Sendet JSON-Daten (Zeichenketten-Werte).

```bash
http POST https://api.example.com/users name=John email=john@example.com
```

`http POST <url> <key>:=<value>` — Sendet rohe JSON-Werte (Zahlen, Booleans, Arrays).

```bash
http POST https://api.example.com/users name=John age:=30 active:=true
```

`http POST <url> < <file>` — Sendet den Request-Body aus einer Datei.

```bash
http POST https://api.example.com/users < data.json
```

`http --json POST <url> <key>=<value>` — Sendet explizit als JSON (Standard für Daten).

```bash
http --json POST https://api.example.com/users name=John
```

`http --form POST <url> <key>=<value>` — Sendet als Formulardaten (application/x-www-form-urlencoded).

```bash
http --form POST https://example.com/login user=admin password=secret
```

`http --multipart POST <url> file@<path>` — Lädt eine Datei hoch (Multipart-Formulardaten).

```bash
http --multipart POST https://api.example.com/upload file@photo.jpg
```

## Header & Authentifizierung

`http <url> <Header>:<value>` — Setzt einen eigenen Header.

```bash
http https://api.example.com/data Accept:application/xml X-API-Key:abc123
```

`http -a <user>:<pass> <url>` — HTTP-Basic-Authentifizierung.

```bash
http -a admin:secret https://api.example.com/admin
```

`http -A bearer -a <token> <url>` — Bearer-Token-Authentifizierung.

```bash
http -A bearer -a eyJhbG... https://api.example.com/me
```

`http <url> Authorization:'Bearer <token>'` — Setzt den Authorization-Header manuell.

```bash
http https://api.example.com/me Authorization:'Bearer eyJhbG...'
```

## Ausgabesteuerung

`http -v <url>` — Ausführlich: zeigt Request-Header, -Body, Antwort-Header und -Body.

```bash
http -v https://api.example.com/users
```

`http -h <url>` — Zeigt nur die Antwort-Header.

```bash
http -h https://example.com
```

`http -b <url>` — Zeigt nur den Antwort-Body.

```bash
http -b https://api.example.com/users
```

`http -p HBhb <url>` — Wählt Ausgabe-Teile aus: H=Request-Header, B=Request-Body, h=Antwort-Header, b=Antwort-Body.

```bash
http -p Hh https://api.example.com/users
```

`http -d <url>` — Download-Modus: speichert den Antwort-Body in einer Datei.

```bash
http -d https://example.com/file.zip
```

`http -o <file> <url>` — Speichert den Antwort-Body in einer bestimmten Datei.

```bash
http -o data.json https://api.example.com/export
```

## Sessions & Konfiguration

`http --session=<name> <url>` — Verwendet eine benannte Session (speichert Cookies, Auth, Header).

```bash
http --session=mysession -a admin:secret https://api.example.com/login
```

`http --session=<name> <url>` — Setzt eine Session fort (Cookies/Auth aus vorherigem Request).

```bash
http --session=mysession https://api.example.com/dashboard
```

`http --follow <url>` — Folgt Weiterleitungen (standardmäßig nicht aktiv).

```bash
http --follow https://example.com/old-page
```

`http --verify=no <url>` — Überspringt die SSL-Zertifikatsprüfung.

```bash
http --verify=no https://self-signed.example.com
```

`http --timeout=<seconds> <url>` — Setzt das Request-Timeout.

```bash
http --timeout=30 https://slow-api.example.com
```

## Häufige Muster

`http --pretty=all <url>` — Erzwingt farbige und formatierte Ausgabe.

```bash
http --pretty=all https://api.example.com/users
```

`http --print=b <url> | jq '<filter>'` — Leitet die JSON-Antwort zur Verarbeitung an jq weiter.

```bash
http --print=b https://api.example.com/users | jq '.[].name'
```

`http --offline POST <url> <data>` — Erstellt und zeigt den Request ohne Absenden (zum Debuggen).

```bash
http --offline POST https://api.example.com/users name=John
```

`https <url>` — Kurzform für http mit HTTPS-Schema.

```bash
https api.example.com/users
```

<!-- PROSE:outro -->
## Fazit

HTTPie lohnt sich überall, wo du schnell und lesbar HTTP-Requests formulieren willst – vor allem beim API-Debugging und im Development-Workflow. Für Skripte oder Umgebungen, in denen curl bereits vorhanden ist, bleibt curl die sichere Wahl. Beide Werkzeuge ergänzen sich, und wer beide kennt, ist für jeden Anwendungsfall gerüstet.

## Weiterführende Links

- [HTTPie – offizielle Dokumentation](https://httpie.io/docs/) – Referenz und Handbuch (englisch)
- [HTTPie – GitHub](https://github.com/httpie/cli) – Quellcode und Releases (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [curl](https://www.jpkc.com/db/cheatsheets/networking/curl/) – HTTP-Requests auf der Kommandozeile, auf praktisch jedem System vorinstalliert
- [wget](https://www.jpkc.com/db/cheatsheets/networking/wget/) – Dateien und ganze Sites herunterladen
- [ab](https://www.jpkc.com/db/cheatsheets/networking/ab/) – HTTP-Server mit Anfragen belasten (Apache Benchmark)

