cURL in Linux: Wissenswertes zum Einstieg
Die freie Software cURL ist eines der ältesten und beliebtesten Open-Source-Projekte. Das in C geschriebene Programm dient dem Versenden von Daten in Computernetzwerken. Dabei steht der Name cURL für „client URL”. Die offene Lizenz räumt das Recht der Nutzung für jedwede Zwecke ein. Aktuell wird cURL in unzähligen Geräten verwendet.
Was ist cURL?
Die Software cURL umfasst zwei Komponenten. Die Programmbibliothek libcurl dient dabei als Rückgrat für den eigentlichen Datentransfer und unterstützt die folgenden Protokolle:
- DICT
- FILE
- FTP
- FTPS
- GOPHER
- HTTP
- HTTPS
- IMAP
- IMAPS
- LDAP
- LDAPS
- POP3
- POP3S
- RTMP
- RTSP
- SCP
- SFTP
- SMB
- SMBS
- SMTP
- SMTPS
- TELNET
- TFTP
Das Kommandozeilenprogramm cURL agiert hingegen als textbasierte Schnittstelle und interagiert über die Kommandozeile mit libcurl.
Das Programm ist ein wichtiges Tool für die Webentwicklung. Denn es erlaubt dem Entwickler, direkt mit Servern zu kommunizieren, statt über einen Browser gehen zu müssen. Auf cURL-Befehlen (oder auch Englisch: cURL commands) aufbauende Skripte werden zur Automatisierung von Prozessen, sowie zum Testen und Debuggen verwendet.
Wie funktioniert cURL?
Die beiden Komponenten von cURL funktionieren auf unterschiedliche Weise.
Wie wird libcurl verwendet?
Die Programmbibliothek libcurl stellt Funktionalitäten zum Versenden von Daten in Computernetzwerken bereit. Es existieren „Language Bindings” (übersetzt bedeutet das so viel wie „Sprachanbindungen”) für dutzende beliebte Programmiersprachen. So werden die Funktionen von libcurl für eine große Anzahl an Software, die mit Servern kommuniziert, nutzbar gemacht.
Wie wird cURL verwendet?
Das Kommandozeilenprogramm cURL dient der Webentwicklung. Die einfachste Methode ist, cURL-Befehle in die Kommandozeile einzugeben. Mit dem entsprechenden Know-how lassen sich so Server und APIs testen und debuggen.
Anstatt die Befehle per Hand in die Kommandozeile einzugeben, kann man diese auch in Skripten bündeln. So lassen sich aufwendige Operationen standardisieren und automatisieren. Das gilt für das Hoch- und Herunterladen von Daten ebenso wie für das programmatische Ausfüllen von Formularen und das Spiegeln ganzer Websites.
Das Schema eines cURL-Befehls sieht im Allgemeinen folgendermaßen aus:
# Generelles Schema eines cURL-Befehls
curl [Optionen] <url>Wir verwenden in den untenstehenden Beispielen die folgende Form:
# Die folgende URL "curlen"
url="www.example.com"
curl [Optionen] "$url"Wir haben die eigentliche URL in eine Variable ausgelagert. So wird der Fokus auf die Optionen gelenkt. Die Optionen bestimmen die Funktionsweise des cURL-Aufrufs.
Praktische Beispiele des cURL-Befehls unter Linux
Um die folgenden cURL-Beispiele nutzen zu können, benötigen Sie:
- Einen Computer mit Linux oder UNIX-ähnlichem Betriebssystem — inklusive macOS.
- Zugang zur Konsole bzw. zur Kommandozeile.
- Einen Code-Editor/„Plain Text”-Editor zum Komponieren von Befehlen.
Ein erster Test mit cURL
Testen Sie zunächst, ob cURL auf Ihrem System installiert ist. Öffnen Sie dazu eine Kommandozeile und fügen Sie dort den folgenden Befehl ein. Gegebenenfalls müssen Sie noch Enter drücken, damit der Code ausgeführt wird.
# Sehen, ob cURL installiert ist
curl --versionWenn Ihnen nun ein Text beginnend mit 'curl' und einer Versionsnummer angezeigt wird, ist cURL installiert. Sollte cURL nicht installiert sein, folgen Sie bitte den Anweisungen von „Everything curl”, um das Programm zu installieren.
Zusätzlich sollten Sie in einem Code-Editor ein neues Dokument öffnen. Sie können dorthin Befehle kopieren, um sie für den Einsatz auf der Kommandozeile vorzubereiten. Wenn der Befehl fertig ist, kopieren Sie ihn in die Kommandozeile und führen Sie ihn dort aus.
Dateien mit cURL herunterladen
Daten mit cURL vom Server abrufen
Prinzipiell können Sie mittels cURL jede Ihnen bekannte URL abrufen. In diesem Zusammenhang wird der Begriff „curlen” als Verb verwendet und beschreibt das Ansprechen einer URL mit cURL. Testen Sie das folgende Beispiel:
# Die folgende Site "curlen"
site="www.google.com"
curl "$site"Wenn Sie den Code so ausführen, wird „Datensalat” ausgeben. Das liegt daran, dass als Antwort auf den cURL-Zugriff die Google-Homepage in HTML zurückgegeben wird. Der HTML-Quelltext wird ohne Formatierung direkt auf der Kommandozeile angezeigt. Zur korrekten Darstellung ist allerdings ein Browser erforderlich. Nützlicher ist es meist, die Datei lokal zu speichern.
Datei mit cURL abrufen und lokal speichern
Laden wir ein Logo der englischen Wikipedia herunter. Die Option '-O' (großes o, keine Null) leitet cURL an, den am Ende der URL befindlichen Namen der Datei zu nutzen. Mit dieser Option wird cURL die heruntergeladene Datei unter demselben Namen lokal speichern.
# Ein Bild der englischen Wikipedia
datei="https://en.wikipedia.org/static/images/project-logos/enwiki-2x.png"
# Das Bild abrufen und unter demselben Namen lokal speichern
curl "$datei" -OWie verhält es sich jedoch mit einer URL, die keinen Dateinamen enthält? Testen Sie den folgenden Code:
# Google Homepage
homepage="www.google.com"
# Die Homepage mit Option -O abrufen
curl "$homepage" -OWie Sie sehen, wird ein Fehler ausgegeben, da die URL der Google-Homepage keinen Dateinamen enthält. Nutzen Sie in diesem Fall die Option '-o' (kleines o), um selber einen Dateinamen zu vergeben:
# Google Homepage
homepage="www.google.com"
# Name für die zu schreibende Datei
name="homepage-google.html"
# Die Homepage abrufen und unter dem gewählten Namen lokal speichern
curl "$homepage" -o "$name"Download mit cURL fortsetzen, falls unterbrochen
Vielleicht haben Sie den ärgerlichen Fall schon einmal erlebt: ein großer Download läuft stundenlang und bricht dann plötzlich ab, und Sie müssen von vorne beginnen. In diesem Fall hilft cURL mit der Option '-C-' weiter:
# Eine große Datei (humanes Genom) zum Herunterladen
datei="https://ftp.ncbi.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/reference/GCF_000001405.39_GRCh38.p13/GCF_000001405.39_GRCh38.p13_genomic.gbff.gz"
# Download fortsetzen, falls unterbrochen
curl -C- -O "$datei"Sie können einen mit cURL gestarteten Download bei Bedarf auch manuell abbrechen. Insbesondere bei großen Dateien ist dies von Vorteil, beispielsweise, wenn Sie das Haus verlassen und den Laptop mitnehmen müssen.
Mittels cURL mit dem Server kommunizieren
Die Download-Funktionalität von cURL ähnelt der des beliebten Kommandozeilen-Tools wget. Jedoch ist cURL nicht auf Downloads spezialisiert, sondern für die generelle Kommunikation in Netzwerken ausgelegt. Daher kann cURL noch einiges mehr.
Mit cURL testen, ob ein Server erreichbar ist
Sie können mit cURL testen, ob ein Server erreichbar ist. Dahingehend ähnelt die Funktionsweise von cURL der des Ping-Befehls. Jedoch ist cURL aufgrund der verfügbaren Protokolle und Optionen flexibler einsetzbar. Zudem arbeitet Ping auf der Internet-Schicht, während cURL auf der Anwendungsschicht läuft. Das bedeutet, Ping testet, ob die Maschine am Netz ist. Der folgende cURL-Befehl hingegen überprüft, ob und wie ein Server reagiert:
# Testen, ob ein Web-Server erreichbar ist
server="google.com"
curl -I "$server"Werden Ihnen nach Ausführung des Codes Statusinformationen angezeigt, ist der Server erreichbar.
Header ausgeben mit cURL
Bei jeder HTTP-Abfrage werden neben dem eigentlichen Dokument verschiedene Meta-Informationen ausgetauscht. Diese HTTP-Header genannten Informationen beschreiben sowohl das Dokument als auch den Status der HTTP-Abfrage. Sicherlich ist Ihnen schon einmal der Fehler 404 Not Found untergekommen. Dabei handelt es sich um genau so eine Meta-Information — das angeforderte Dokument wurde nicht gefunden.
Schauen Sie sich die Ausgabe der Header der URL 'google.com' an. Nutzen Sie dafür cURL mit der '--head' Option:
# Header ausgeben
url="google.com"
curl --head "$url"Ihnen sollte unter anderem „301 Moved Permanently” angezeigt werden. Dabei handelt es sich um den HTTP-Status-Code für eine permanente Weiterleitung. Was Sie beobachten, ist die Weiterleitung von [google.com] (ohne 'www') auf [www.google.com].
Redirect-Chains mit cURL analysieren
HTTP-Weiterleitungen (Englisch: „Redirects”) können in Reihe geschaltet sein. In diesem Zusammenhang wird der Begriff „Redirect Chain” (oder „Weiterleitungs-Kette”) verwendet. Stellen Sie sich als Beispiel eine Website vor, deren Homepage [https://www.example.com/] lautet. Wenn wir diese Site jedoch mit [http://example.com] ansprechen, ergeben sich gegebenenfalls die folgenden Weiterleitungen:
- [http://example.com] → [https://example.com]
- [https://example.com] → [https://www.example.com]
- [https://www.example.com] → [https://www.example.com/]
Eine Verkettung der Weiterleitungen führt zu unnötig langen Ladezeiten und sollte vermieden werden. Leider handelt es sich um ein nicht einfach zu analysierendes Problem. Beim Laden der Site im Browser werden die Weiterleitungen nämlich durchlaufen, ohne dass der Benutzer davon viel mitbekommt. In diesem Fall hilft cURL mit der Option '--location' weiter. Diese leitet cURL an, den Weiterleitungen bis zur letzten zu folgen. Wir benutzen hier die Option '--head', weil uns der Inhalt der Seiten nicht interessiert.
# Redirects überprüfen
url="google.com"
curl --location --head "$url"Daten mit cURL an den Server übertragen
Sie können mit cURL nicht nur Daten abrufen, sondern auch Daten an einen Server senden. Das ist beispielsweise dann sehr praktisch, wenn Sie das Ausfüllen eines Online-Formulars automatisieren möchten. Neben der POST-Anfragemethode unterstützt cURL auch GET.
Da das Senden von Daten komplexer ist als das Abrufen, können wir hier nur ein ungefähres Beispiel skizzieren. Nutzen Sie für detailliertere Informationen die Hinweise von Everything curl.
# Daten an Server übertragen
url="example.com"
# Geben Sie die Daten als Schlüssel-Wert-Paare getrennt durch '&' an
daten="name=Peter&nachname=Mustermann&alter=42"
# Dieser curl-Aufruf übertragt die Daten per POST
curl --data "$daten" "$url"
# Alternativ weisen Sie curl an, die Daten per GET zu übertragen
curl --data "$daten" "$url" --getCookies mit cURL auslesen
HTTP-Cookies im Internet sind kleine Textinformationen, die beim Besuch der meisten Websites lokal auf Ihrem Gerät gespeichert werden. Sie können sich die Cookies einer besuchten Site im Browser ansehen und die Cookies dort auch löschen. Für Testzwecke ist dies jedoch meist zu umständlich. Mit cURL und der Option '--cookie-jar' („cookie jar”, zu Deutsch in etwa „Keksdose”) ist auch ein direkterer Zugriff auf die Cookies möglich.
# Cookies auslesen
url="www.google.com"
cookies="cookies.txt"
curl --head --cookie-jar "$cookies" "$url"
# Cookies mit dem cat-Befehl anzeigen
cat "$cookies"Generelle Optionen
Einige der verfügbaren cURL-Optionen lassen sich mit den bereits vorgestellten kombinieren.
Zusätzliche Informationen anzeigen
In manchen Fällen genügen die bei der Ausführung eines cURL-Befehls angezeigten Informationen nicht. Sie können dann die Option '--verbose' nutzen. Ein damit versehener cURL-Befehl gibt eine größere Fülle an Informationen aus.
# Zusätzliche Informationen anzeigen
url="www.google.com"
curl --verbose -I "$url"Benutzer und Passwort mit cURL angeben
Manche URLs sind mit HTTP-Authentifizierung vor unerlaubtem Zugriff gesichert. Was jedoch, wenn Sie mit cURL auf eine derartige URL zugreifen möchten? Ohne Angabe von Nutzername und Passwort würde Ihnen der HTTP-Fehler 401 angezeigt. Nutzen Sie in diesem Fall das folgende Schema:
# Benutzer und Passwort mit curl angeben
# Passwortgeschützte URL
url="www.example.com/secure/"
# Benutzer
nutzer=""
# Passwort
passwort=""
curl --user "${nutzer}:${passwort}" "$url"Proxy mit cURL verwenden
Ein Proxy ist ein zwischengeschalteter Server. Der Einsatz eines Proxys kann aus verschiedenen Gründen sinnvoll sein. Beispielsweise lassen sich bestimmte Sicherheits- und Performanz-Anforderungen durch Nutzung eines Proxys besser realisieren.
Wenn Sie sich über einen Proxy mit dem Internet verbinden, müssen Sie cURL darüber informieren. Nutzen Sie dafür die '--proxy' Option:
# Proxy mit cURL verwenden
url="www.google.com"
proxy="proxy.example.com"
port="8080"
curl --proxy "${proxy}:${port}" "$url"
