[[Vorlage(getestet, bionic, focal)]] {{{#!vorlage wissen [:Pakete_installieren:Installation von Programmen] [:Terminal:Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [http://curl.haxx.se/ cURL] {en} ist ein Programm, das es ermöglicht, ohne Benutzerinteraktion Dateien von oder zu einem Server zu übertragen. Neben HTTP unterstützt das Programm noch eine Vielzahl von weiteren Netzwerkprotokollen wie FTP, FTPS, HTTPS, GOPHER, TELNET, DICT, FILE und LDAP. Die Steuerung erfolgt über Kommandozeilenparameter, die beim Programmaufruf angegeben werden. cURL nutzt für alle den Datentransfer betreffenden Funktionen die Bibliothek libcurl. Es wird häufig für die Arbeit mit [wikipedia:Representational_State_Transfer:REST]-ful Services verwendet, z.B. zur Entwicklung oder zum Debugging solcher Dienste. = Installation = Das Programm kann über das gleichnamige Paket installiert werden [1]: {{{#!vorlage Paketinstallation curl }}} = Verwendung = Aus einem Terminal heraus [2] kann man cURL folgendermaßen aufrufen: {{{#!vorlage Befehl curl Optionen... URL }}} == Optionen == {{{#!vorlage Tabelle <-2 rowclass="titel">Optionen von cURL +++ <-2 rowclass="kopf" :>Log-Optionen +++ `-v`, `--verbose` Gibt umfangreiche Informationen zur Client-Server-Kommunikation aus. +++ `--trace DATEI`, `--trace-ascii DATEI` Liefert noch detailliertere Informationen als `--verbose` und schreibt diese in die angegebene Datei. +++ <-2 rowclass="kopf" :>Upload-Optionen +++ `-T DATEI URL`, `--upload-file DATEI URL` Überträgt die Datei zum angegebenen Ziel. +++ <-2 rowclass="kopf" :>Download-Optionen, Arbeit mit HTTP +++ `-C`, `--continue-at OFFSET` Fortsetzung bzw. Wiederaufnahme einer vorangegangenen Dateiübertragung an der angegebenen Stelle. `-C -` bewirkt, dass CURL automatisch anhand der gegebenen output/input-Dateien herausfindet, wo und wie die Übertragung wiederaufgenommen werden kann. +++ `-L`, `--location` Folgt Weiterleitungen (nur HTTP/HTTPS) +++ `-o DATEI`, `--output DATEI` Schreibt den Inhalt der heruntergeladenen Datei in die angegebene DATEI anstatt auf die [:Shell/Umleitungen/#Standardausgabe: Standardausgabe] +++ ` -r BEREICH`, `--range BEREICH` Ruft nur die Bytes innerhalb des angegebenen BEREICHES ab. Wenn der Server dies nicht unterstützt, wird die gesamte Datei heruntergeladen. +++ `-O`, `--remote-name` Schreibt den Inhalt der heruntergeladenen Datei in eine gleichnamige Datei. +++ `-X COMMAND URL`, `--request COMMAND URL` Führt den angegebenen HTTP-Command auf die angegebene URL aus. +++ <-2 rowclass="kopf" :>Proxy-Optionen +++ `-x PROTOCOL://HOST:PORT`, `--proxy PROTOCOL://HOST:PORT` Verwendet den angegebenen Proxy. Das Protokoll und der Port sind optional. +++ `-U USER:PASSWORD`, `--proxy-user USER:PASSWORD` Verwendet den angegebenen Proxy User. Das Passwort ist optional. +++ <-2 rowclass="kopf" :>weitere-Optionen +++ `-u USER:PASSWORD` übergibt Zugangsdaten }}} Alle Optionen - auch zu anderen Netzwerkprotokollen - findet man in der [:man:manpage] von cURL. == Beispiele == Weitere Beispiele findet man im [https://curl.haxx.se/book.html cURL Handbuch] {en}. === Dateidownload === Mit cURL lassen sich auch Dateidownloads durchführen. Dies funktioniert sowohl mit HTTP- als auch mit FTP-Downloads. Der folgende Befehl holt ein Ubuntu-Image von einem FTP-Server und speichert es dann im aktuellen Verzeichnis: {{{#!vorlage Befehl curl -O ftp://ftp.halifax.rwth-aachen.de/ubuntu-releases/12.04.1/ubuntu-12.04.1-desktop-i386.iso }}} Möchte man die Datei unter einem anderen Namen oder in einem anderen Verzeichnis speichern, dann ersetzt man die Option `-O` einfach durch die Option `--output /PFAD/ZUM/VEERZEICHNIS/DATEINAME.XXX`. Gibt man keinen Pfad sondern nur einen Dateinamen an, so wird die Datei im aktuellen Verzeichnis gespeichert. Würde der Download des vorgenannten Ubuntu-Images unter- bzw. abgebrochen werden, so könnte man ihn mit dem folgenden Befehl fortsetzen bzw. wiederaufnehmen: {{{#!vorlage Befehl curl -C - -O ftp://ftp.halifax.rwth-aachen.de/ubuntu-releases/12.04.1/ubuntu-12.04.1-desktop-i386.iso }}} Durch die Option `-C -` wird die Übertragung automatisch an der abgebrochenen Stelle wiederaufgenommen werden. Wird die Option `-O` oder `--output` weggelassen, dann wird der Inhalt der heruntergeladenen Datei auf die Standardausgabe (also in der Regel den Bildschirm) ausgegeben. Dies kann z.B. zum Betrachten kurzer Skripte oder Readme-Dateien sinnvoll sein. So würde der Befehl {{{#!vorlage Befehl curl http://www.example.com/foo/readme.txt }}} die Datei '''readme.txt''' auf den Bildschirm ausgeben. Würde dabei zusätzlich noch die Option `-L` gesetzt werden, so würde etwaigen Weiterleitungen gefolgt werden. === Dateiupload === Mit cURL lassen sich auch Dateiuploads durchführen. Dies funktioniert sowohl mit HTTP- als auch mit FTP-Servern. Der folgende Befehl schiebt eine Datei auf einen FTP-Server in das Verzeichnis foo: {{{#!vorlage Befehl curl -T datei.name ftp://www.example.com/foo/ }}} Viele Server wollen auch Zugangsdaten haben (geht auch bei Downloads): {{{#!vorlage Befehl curl -T datei.name -u username:password ftp://www.example.com/foo/ }}} === FRITZ!Box auslesen === Beispiele finden sich im Artikel [:FritzBox/Skripte:]. === ReSTful Services === Für die folgenden Beispiele wird die API von [:CouchDB:] verwendet. Es wird davon ausgegangen, dass unter der URL `http://127.0.0.1:5984` eine Instanz von CouchDB erreichbar ist. Zunächst wird ein HTTP-GET auf die Ressource `/` ausgeführt, um die Datenbank-Version abzufragen: {{{#!vorlage Befehl curl -X GET http://127.0.0.1:5984/ }}} Als Ergebnis erhält man die Daten `{"couchdb":"Welcome","version":"1.2.0"}` (im JSON-Format). Offensichtlich läuft also eine CouchDB in der Version 1.2.0. Nun wird per HTTP-GET auf die Ressource `/_all_dbs` ermittelt, welche Datenbanken vorhanden sind: {{{#!vorlage Befehl curl -X GET http://127.0.0.1:5984/_all_dbs }}} Das zurückgelieferte Ergebnis zeigt, dass drei Datenbanken existieren, darunter eine mit dem Namen sample: `[ "_replicator", "_users", "sample" ]` Zuletzt soll die Datenbank mit dem Namen "sample" gelöscht werden. Dazu wird auf die Ressource `/sample` ein HTTP-DELETE ausgeführt: {{{#!vorlage Befehl curl -X DELETE http://127.0.0.1:5984/sample }}} Wie nicht anders zu erwarten war, teilt das Ergebnis mit, dass die zur Löschung notwendigen Rechte fehlen: `{"error":"unauthorized","reason":"You are not a server admin."}` === Wetterbericht abrufen === Die Webseite [http://wttr.in wttr.in] {en} ist so konzipiert, dass man mit cURL den dort angezeigten Wetterbericht als formatierten Datensatz für eine Ausgabe im [:Terminal:] herunterladen kann: {{{#!vorlage befehl curl wttr.in }}} Sofern die automatische Erkennung des Standorts nicht funktioniert, kann der Ort für den Wetterbericht an die URL angehängt werden: {{{#!vorlage befehl curl wttr.in/Berlin }}} Inzwischen lassen sich auch die Mondphasen anzeigen: {{{#!vorlage befehl curl wttr.in/Moon }}} = Links = == Intern == * [:HTTPie:] - Alternative zu cURL zum Erstellen von HTTP-Anfragen * [:Shell/Anwendungen:] {Übersicht} Übersichtsseite == Extern == * [http://www.thegeekstuff.com/2012/04/curl-examples/ 15 Practical Linux cURL Command Examples (cURL Download Examples)] {en} - Blogbeitrag, 04/2012 * [http://www.laktek.com/2012/03/12/curl-tips-for-daily-use/ A Few cURL Tips for Daily Use] {en} - Blogbeitrag, 03/2012 #tag: Shell, Download, Internet, ftp