[[Vorlage(Getestet, focal, jammy)]]

{{{#!vorlage Wissen
[:Pakete installieren: Installation von Programmen]
[:mit Root-Rechten arbeiten:]
[:Terminal: Ein Terminal öffnen]
}}}
[[Inhaltsverzeichnis(1)]]

[[Bild(Wiki/Icons/terminal.png, 48, align=left)]]
[https://httpie.org/ HTTPie] {en} ist ein Kommandozeilenprogramm zum Erstellen von HTTP-Abfragen und Download von Dateien. Es deckt also den gleichen Einsatzbereich wie [:cURL:] und in Teilen [:wget:] ab, wobei sich die Entwickler von HTTPie zum Ziel gesetzt haben, anwenderfreundlicher als die beiden genannten Programme zu sein.

HTTPie ist in [:Python:] geschrieben und auf allen gängigen Betriebssystemen wie Linux, MacOS und Windows lauffähig.

= Installation =
HTTPie kann aus den offiziellen Paketquellen oder manuell installiert werden. Je nach Ubuntu-Version ist die Version des Programms in den Quellen relativ bzw. sehr alt, so dass die manuelle Installation gegebenenfalls vorzuziehen ist.

Für die Installation der Entwcklungsversion siehe zusätzlich die [https://httpie.io/docs/cli/installation Dokumentation] {en}.

Die Installation aus den offiziellen Paketquellen erfolgt über das folgende Paket [1]:

{{{#!vorlage Paketinstallation
httpie, universe
}}}

== via pip ==
Wie bei Python üblich kann das Programm mit dem Python-Paketmanager [:pip:] installiert werden.

[[Vorlage(PipInstallation, httpie)]]

= Verwendung =
HTTPie wird über den Befehl `http` in der Kommandozeile [3] aufgerufen. Die allgemeine Syntax lautet:

{{{#!vorlage Befehl
http [OPTIONEN] [HTTP-METHODE] URL [PARAMETER]
}}}

Im einfachsten Fall gibt man nur eine Internet-Adresse (URL) an, dann sendet HTTPie standardmäßig mit der HTTP-Methode `GET`. So würde der Aufruf von

{{{#!vorlage Befehl
http https://httpie.org
}}}

die Startseite der HTTPie-Webseite laden und auf [:Shell/Umleitungen:stdout] (also in der Regel dem Terminal) anzeigen:

{{{
HTTP/1.1 200 OK
CF-RAY: 31d0954048236451-FRA
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Fri, 06 Jan 2017 16:35:24 GMT
Server: cloudflare-nginx
Set-Cookie: __cfduid=d41b52ae4db3b4e45d73e83ff16f3cadc1483720524; expires=Sat, 06-Jan-18 16:35:24 GMT; path=/; domain=.httpie.org; HttpOnly
Transfer-Encoding: chunked

<!doctype html>
<html id="page-home">
<head>
<meta charset="utf-8"/>
<title>HTTPie – command line HTTP client</title>
<meta name="description" content="HTTPie is a command line HTTP client that will make you smile.">
<meta name="viewport" content="width=device-width, initial-scale=1">

<script>
...
}}}

Wie im Beispiel zu sehen ist, wird zuerst der HTTP-Header ausgegeben und dann der eigentlich Quelltext der Webseite. Möchte man die Daten speichern, nutzt man einfach die üblichen [:Shell/Umleitungen:Umleitungen] im Terminal.

== HTTP-Methoden ==
HTTPie unterstützt auch andere HTTP-Methoden statt `GET`. Um diese auszuführen, muss man dem Befehl einfach das entsprechende [wikipedia:Hypertext_Transfer_Protocol#HTTP-Anfragemethoden:HTTP-Verb] mit geben. So würden z.B.

{{{#!vorlage Befehl
http DELETE example.com/foo/123
}}}

eine `DELETE` Anfrage an die angegebene URL senden.

Man kann auch Daten angeben, die mit der Anfrage mitgeschickt werden. Ohne weitere Optionen werden diese im JSON-Format mitgesendet. So würde z.B. der Aufruf

{{{#!vorlage Befehl
http PUT example.com/bar/234 vorname=Rainer nachname=Titan
}}}

eine `PUT` Anfrage an die angegebene URL senden, den Content-Type automatisch auf `Content-Type: application/json` setzen und die Daten in der Form

{{{#!code json
{
"vorname":"Rainer",
"nachname":"Titan"
}
}}}
senden. Weitere Informationen finden sich in der [https://httpie.io/docs/cli/json Dokumentation] {en}.

== Optionen ==
HTTPie kennt eine ganze Reihe von Optionen:

{{{#!vorlage Tabelle
<-2 rowclass="titel">Optionen von HTTPie
+++
<rowclass="kopf">Option
Erklärung
+++
`-h`, `--header`
Es wird nur der Header der Abfrage ausgegeben
+++
`-b`, `--body`
Es wird nur der Body (also der eigentliche Inhalt) der Abfrage ausgegeben
+++
`-v`, `--verbose`
Ausführliche Ausgabe, inklusive der kompletten HTTP-Kommunikation zwischen HTTPie und Server
+++
`-a`, `--auth`
Sendet Daten zur [https://httpie.io/docs/cli/authentication Authentifizierung] {en} mit. Man kann Benutzernamen und Password in der Form `-a NUTZER:PASSWORT` angeben oder nur den Nutzernamen `-a NUTZER`. Bei letzterem muss man dann das Passwort an der Eingabeaufforderung eingeben.
+++
`-A` `--auth-type`
Legt den Authentifizierungstyp fest. Standard ist `BASIC`, über `-A DIGEST` würde die Digest-Authentifizierung genutzt. Weitere Authentifizierungsmethoden können über [#Plug-Ins-zur-Authentifizierung Plugins] nachgerüstet werden.
+++
`-f`, `--form`
Sendet Daten als Formular mit. So würde z.B. `http -f example.com/inputform user='Otto Normal' age=37` an die angegebene URL den Wert `Otto Normal` für das Formularfeld `user` und den Wert `37` für das Formularfeld `age` senden. Der Aufruf von `http -f example.com/upload imagename@/home/NUTZER/mein_bild.jpg` würde an die angegebene URL  an das Formularfeld `imagename` (was natürlich vom Typ `file` sein sollte) die Datei '''/home/NUTZER/mein_bild.jpg''' senden.
}}}

HTTPie kennt noch viele weitere Optionen, unter anderem zum Umgang mit Sessions, SSL, Streaming usw. Diese sind in der im Abschnitt [#Links Links] genannten (englischsprachigen) Dokumentation erklärt.

== Downloads mit HTTPie ==
Möchte man mit HTTPie eine Datei herunterladen, dann lautet die Option `-d` oder `--download`. So würde z.B. 

{{{#!vorlage Befehl
http -d ftp.halifax.rwth-aachen.de/ubuntu-releases/16.04/ubuntu-16.04.1-desktop-amd64.iso
}}}

das ISO-Image von Ubuntu 16.04 vom angegebenen Server herunterladen. Die Datei wird im Verzeichnis gespeichert, aus dem heraus der Befehl aufgerufen wurde. HTTPie besitzt eine Fortschrittsanzeige, so dass man sieht, wie weit der Download schon fortgeschritten ist.

Gibt man zusätzlich die Option `-o NEUER_NAME` an, wird die Datei unter dem angegebenen Namen gespeichert, im folgenden Beispiel also '''ubuntu.iso''':

{{{#!vorlage Befehl
http -o ubuntu.iso -d ftp.halifax.rwth-aachen.de/ubuntu-releases/16.04/ubuntu-16.04.1-desktop-amd64.iso
}}}

Die Option `-o` ist immer dann zwingend, wenn der Download ggf. unterbrochen und später wieder aufgenommen wird (sofern der Server dies unterstützt).

Würde man den obigen Download z.B. über [[Vorlage(Tasten, strg+c)]] abbrechen, dann könnte er mit der Option `-c` wieder aufgenommen und fortgesetzt werden:

{{{#!vorlage Befehl
http -c -o ubuntu.iso -d ftp.halifax.rwth-aachen.de/ubuntu-releases/16.04/ubuntu-16.04.1-desktop-amd64.iso
}}}   

== Plug-Ins zur Authentifizierung ==
Wie oben erwähnt unterstützt HTTPie von sich aus nur die Authentifizierungsmethoden "BasicAuth" und "Digest". Weitere Methoden wie z.B. OAuth oder HMAC können aber über Plug-Ins nachinstalliert werden. Die Plugins werden einfach via [:pip:] installiert.

Eine Übersicht über die verfügbaren Plugins findet man in der Dokumentation zu den [https://httpie.org/doc#auth-plugins Auth-Plugins] {en}.

= Links =
 * [https://httpie.org/doc Ausführliche Dokumentation] {en} zu HTTPie
  * [man:http.1:Manpage] {en}
  * [github:httpie/httpie:Quellcode] {en}

#tag: Internet, Shell, Download