Die freie Software cURL ist eines der ältesten und be­lieb­tes­ten Open-Source-Projekte. Das in C ge­schrie­be­ne Programm dient dem Versenden von Daten in Com­pu­ter­netz­wer­ken. 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 un­zäh­li­gen Geräten verwendet.

Was ist cURL?

Die Software cURL umfasst zwei Kom­po­nen­ten. Die Pro­gramm­bi­blio­thek libcurl dient dabei als Rückgrat für den ei­gent­li­chen Da­ten­trans­fer und un­ter­stützt die folgenden Pro­to­kol­le:

Das Kom­man­do­zei­len­pro­gramm cURL agiert hingegen als text­ba­sier­te Schnitt­stel­le und in­ter­agiert über die Kom­man­do­zei­le mit libcurl.

Das Programm ist ein wichtiges Tool für die Web­ent­wick­lung. Denn es erlaubt dem Ent­wick­ler, direkt mit Servern zu kom­mu­ni­zie­ren, statt über einen Browser gehen zu müssen. Auf cURL-Befehlen (oder auch Englisch: cURL commands) auf­bau­en­de Skripte werden zur Au­to­ma­ti­sie­rung von Prozessen, sowie zum Testen und Debuggen verwendet.

Wie funk­tio­niert cURL?

Die beiden Kom­po­nen­ten von cURL funk­tio­nie­ren auf un­ter­schied­li­che Weise.

Wie wird libcurl verwendet?

Die Pro­gramm­bi­blio­thek libcurl stellt Funk­tio­na­li­tä­ten zum Versenden von Daten in Com­pu­ter­netz­wer­ken bereit. Es exis­tie­ren „Language Bindings” (übersetzt bedeutet das so viel wie „Sprach­an­bin­dun­gen”) für dutzende beliebte Pro­gram­mier­spra­chen. So werden die Funk­tio­nen von libcurl für eine große Anzahl an Software, die mit Servern kom­mu­ni­ziert, nutzbar gemacht.

Wie wird cURL verwendet?

Das Kom­man­do­zei­len­pro­gramm cURL dient der Web­ent­wick­lung. Die ein­fachs­te Methode ist, cURL-Befehle in die Kom­man­do­zei­le ein­zu­ge­ben. Mit dem ent­spre­chen­den Know-how lassen sich so Server und APIs testen und debuggen.

Anstatt die Befehle per Hand in die Kom­man­do­zei­le ein­zu­ge­ben, kann man diese auch in Skripten bündeln. So lassen sich auf­wen­di­ge Ope­ra­tio­nen stan­dar­di­sie­ren und au­to­ma­ti­sie­ren. Das gilt für das Hoch- und Her­un­ter­la­den von Daten ebenso wie für das pro­gram­ma­ti­sche Ausfüllen von For­mu­la­ren und das Spiegeln ganzer Websites.

Das Schema eines cURL-Befehls sieht im All­ge­mei­nen fol­gen­der­ma­ßen aus:

# Generelles Schema eines cURL-Befehls
curl [Optionen] <url>

Wir verwenden in den un­ten­ste­hen­den Bei­spie­len die folgende Form:

# Die folgende URL "curlen"
url="www.example.com"
curl [Optionen] "$url"

Wir haben die ei­gent­li­che URL in eine Variable aus­ge­la­gert. So wird der Fokus auf die Optionen gelenkt. Die Optionen bestimmen die Funk­ti­ons­wei­se des cURL-Aufrufs.

Prak­ti­sche Beispiele des cURL-Befehls unter Linux

Um die folgenden cURL-Beispiele nutzen zu können, benötigen Sie:

  1. Einen Computer mit Linux oder UNIX-ähnlichem Be­triebs­sys­tem — inklusive macOS.
  2. Zugang zur Konsole bzw. zur Kom­man­do­zei­le.
  3. Einen Code-Editor/„Plain Text”-Editor zum Kom­po­nie­ren von Befehlen.
Hinweis

Nutzen Sie zum Kom­po­nie­ren von Befehlen aus­schließ­lich einen Code-Editor/„Plain Text”-Editor. Kei­nes­falls sollten Sie Text­ver­ar­bei­tungs­soft­ware wie Word, Open­Of­fice oder Libre­Of­fice nutzen, um Text für die Kom­man­do­zei­le vor­zu­be­rei­ten.

Ein erster Test mit cURL

Testen Sie zunächst, ob cURL auf Ihrem System in­stal­liert ist. Öffnen Sie dazu eine Kom­man­do­zei­le und fügen Sie dort den folgenden Befehl ein. Ge­ge­be­nen­falls müssen Sie noch Enter drücken, damit der Code aus­ge­führt wird.

# Sehen, ob cURL installiert ist
curl --version

Wenn Ihnen nun ein Text beginnend mit 'curl' und einer Ver­si­ons­num­mer angezeigt wird, ist cURL in­stal­liert. Sollte cURL nicht in­stal­liert sein, folgen Sie bitte den An­wei­sun­gen von „Ever­y­thing curl”, um das Programm zu in­stal­lie­ren.

Tipp

Nutzen Sie die Befehle 'curl --help' und 'curl --manual', um mehr über den cURL-Befehl zu erfahren.

Zu­sätz­lich sollten Sie in einem Code-Editor ein neues Dokument öffnen. Sie können dorthin Befehle kopieren, um sie für den Einsatz auf der Kom­man­do­zei­le vor­zu­be­rei­ten. Wenn der Befehl fertig ist, kopieren Sie ihn in die Kom­man­do­zei­le und führen Sie ihn dort aus.

Hinweis

Auf der Kom­man­do­zei­le ver­wen­de­te Befehle sind sehr mächtig. Ein falsch ein­ge­ge­be­ner Befehl kann prin­zi­pi­ell das gesamte System lahmlegen. Daher sollte man Befehle aus dem Internet nicht einfach kopieren und auf der hei­mi­schen Kom­man­do­zei­le ausführen. Statt­des­sen bietet es sich an, in einem Code-Editor ein leeres Fenster offen zu haben. Dorthin werden die Befehle zunächst kopiert. Durch diesen Zwi­schen­schritt zwingen Sie sich zu einer kurzen Pause. Sie können dann jeden Befehl über­prü­fen und ge­ge­be­nen­falls anpassen, bevor Sie ihn ausführen.

Dateien mit cURL her­un­ter­la­den

Daten mit cURL vom Server abrufen

Prin­zi­pi­ell können Sie mittels cURL jede Ihnen bekannte URL abrufen. In diesem Zu­sam­men­hang wird der Begriff „curlen” als Verb verwendet und be­schreibt das An­spre­chen 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 „Da­ten­sa­lat” ausgeben. Das liegt daran, dass als Antwort auf den cURL-Zugriff die Google-Homepage in HTML zu­rück­ge­ge­ben wird. Der HTML-Quelltext wird ohne For­ma­tie­rung direkt auf der Kom­man­do­zei­le angezeigt. Zur korrekten Dar­stel­lung ist al­ler­dings ein Browser er­for­der­lich. Nütz­li­cher ist es meist, die Datei lokal zu speichern.

Tipp

Benutzen Sie auf der Kom­man­do­zei­le den Befehl 'clear', um den Bild­schirm zu leeren. So werden Sie störende Da­ten­men­gen auf der Kom­man­do­zei­le wieder los.

Datei mit cURL abrufen und lokal speichern

Laden wir ein Logo der eng­li­schen Wikipedia herunter. Die Option '-O' (großes o, keine Null) leitet cURL an, den am Ende der URL be­find­li­chen Namen der Datei zu nutzen. Mit dieser Option wird cURL die her­un­ter­ge­la­de­ne 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" -O

Wie verhält es sich jedoch mit einer URL, die keinen Da­tei­na­men enthält? Testen Sie den folgenden Code:

# Google Homepage
homepage="www.google.com"
# Die Homepage mit Option -O abrufen
curl "$homepage" -O

Wie Sie sehen, wird ein Fehler aus­ge­ge­ben, da die URL der Google-Homepage keinen Da­tei­na­men enthält. Nutzen Sie in diesem Fall die Option '-o' (kleines o), um selber einen Da­tei­na­men 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 fort­set­zen, falls un­ter­bro­chen

Viel­leicht haben Sie den är­ger­li­chen Fall schon einmal erlebt: ein großer Download läuft stun­den­lang 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"
Hinweis

Streng genommen lautet die Option '-C -', mit einem Leer­zei­chen nach dem C. Besser lesbar und einfacher zu merken ist die gleich­wer­ti­ge Schreib­wei­se '-C-', die wir hier verwenden.

Sie können einen mit cURL ge­star­te­ten Download bei Bedarf auch manuell abbrechen. Ins­be­son­de­re bei großen Dateien ist dies von Vorteil, bei­spiels­wei­se, wenn Sie das Haus verlassen und den Laptop mitnehmen müssen.

Tipp

Sie können den laufenden Aufruf von cURL abbrechen. Drücken Sie zum Abbrechen Ctrl+C, ge­ge­be­nen­falls auch mehrmals.

Mittels cURL mit dem Server kom­mu­ni­zie­ren

Die Download-Funk­tio­na­li­tät von cURL ähnelt der des beliebten Kom­man­do­zei­len-Tools wget. Jedoch ist cURL nicht auf Downloads spe­zia­li­siert, sondern für die generelle Kom­mu­ni­ka­ti­on in Netz­wer­ken ausgelegt. Daher kann cURL noch einiges mehr.

Mit cURL testen, ob ein Server er­reich­bar ist

Sie können mit cURL testen, ob ein Server er­reich­bar ist. Da­hin­ge­hend ähnelt die Funk­ti­ons­wei­se von cURL der des Ping-Befehls. Jedoch ist cURL aufgrund der ver­füg­ba­ren Pro­to­kol­le und Optionen flexibler ein­setz­bar. Zudem arbeitet Ping auf der Internet-Schicht, während cURL auf der An­wen­dungs­schicht 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 Aus­füh­rung des Codes Sta­tus­in­for­ma­tio­nen angezeigt, ist der Server er­reich­bar.

Header ausgeben mit cURL

Bei jeder HTTP-Abfrage werden neben dem ei­gent­li­chen Dokument ver­schie­de­ne Meta-In­for­ma­tio­nen aus­ge­tauscht. Diese HTTP-Header genannten In­for­ma­tio­nen be­schrei­ben sowohl das Dokument als auch den Status der HTTP-Abfrage. Si­cher­lich ist Ihnen schon einmal der Fehler 404 Not Found un­ter­ge­kom­men. Dabei handelt es sich um genau so eine Meta-In­for­ma­ti­on — das an­ge­for­der­te 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 Per­ma­nent­ly” angezeigt werden. Dabei handelt es sich um den HTTP-Status-Code für eine per­ma­nen­te Wei­ter­lei­tung. Was Sie be­ob­ach­ten, ist die Wei­ter­lei­tung von [google.com] (ohne 'www') auf [www.google.com].

Tipp

Statt der Option '--head' können Sie auch die äqui­va­len­te Schreib­wei­se '-I' (großes i) verwenden. Merken Sie sich als Esels­brü­cke, dass Sie damit Infor­ma­tio­nen für eine URL abrufen anstatt deren ei­gent­li­chen Content.

Redirect-Chains mit cURL ana­ly­sie­ren

HTTP-Wei­ter­lei­tun­gen (Englisch: „Redirects”) können in Reihe ge­schal­tet sein. In diesem Zu­sam­men­hang wird der Begriff Redirect Chain (oder „Wei­ter­lei­tungs-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] an­spre­chen, ergeben sich ge­ge­be­nen­falls die folgenden Wei­ter­lei­tun­gen:

  • [http://example.com] → [https://example.com]
  • [https://example.com] → [https://www.example.com]
  • [https://www.example.com] → [https://www.example.com/]

Eine Ver­ket­tung der Wei­ter­lei­tun­gen führt zu unnötig langen La­de­zei­ten und sollte vermieden werden. Leider handelt es sich um ein nicht einfach zu ana­ly­sie­ren­des Problem. Beim Laden der Site im Browser werden die Wei­ter­lei­tun­gen nämlich durch­lau­fen, ohne dass der Benutzer davon viel mit­be­kommt. In diesem Fall hilft cURL mit der Option '--location' weiter. Diese leitet cURL an, den Wei­ter­lei­tun­gen bis zur letzten zu folgen. Wir benutzen hier die Option '--head', weil uns der Inhalt der Seiten nicht in­ter­es­siert.

# Redirects überprüfen
url="google.com"
curl --location --head  "$url"
Tipp

Statt der Option '--location' können Sie auch die äqui­va­len­te Schreib­wei­se '-L' (großes l) verwenden.

Daten mit cURL an den Server über­tra­gen

Sie können mit cURL nicht nur Daten abrufen, sondern auch Daten an einen Server senden. Das ist bei­spiels­wei­se dann sehr praktisch, wenn Sie das Ausfüllen eines Online-Formulars au­to­ma­ti­sie­ren möchten. Neben der POST-An­fra­ge­me­tho­de un­ter­stützt cURL auch GET.

Da das Senden von Daten komplexer ist als das Abrufen, können wir hier nur ein un­ge­fäh­res Beispiel skiz­zie­ren. Nutzen Sie für de­tail­lier­te­re In­for­ma­tio­nen die Hinweise von Ever­y­thing 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" --get

Cookies mit cURL auslesen

HTTP-Cookies im Internet sind kleine Text­in­for­ma­tio­nen, die beim Besuch der meisten Websites lokal auf Ihrem Gerät ge­spei­chert werden. Sie können sich die Cookies einer besuchten Site im Browser ansehen und die Cookies dort auch löschen. Für Test­zwe­cke ist dies jedoch meist zu um­ständ­lich. Mit cURL und der Option '--cookie-jar' („cookie jar”, zu Deutsch in etwa „Keksdose”) ist auch ein di­rek­te­rer 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"
Tipp

Mit Hilfe der Option '--cookie' können Sie cURL auch anweisen, Cookies zu versenden.

Generelle Optionen

Einige der ver­füg­ba­ren cURL-Optionen lassen sich mit den bereits vor­ge­stell­ten kom­bi­nie­ren.

Zu­sätz­li­che In­for­ma­tio­nen anzeigen

In manchen Fällen genügen die bei der Aus­füh­rung eines cURL-Befehls an­ge­zeig­ten In­for­ma­tio­nen nicht. Sie können dann die Option '--verbose' nutzen. Ein damit ver­se­he­ner cURL-Befehl gibt eine größere Fülle an In­for­ma­tio­nen aus.

# Zusätzliche Informationen anzeigen
url="www.google.com"
curl --verbose -I "$url"

Benutzer und Passwort mit cURL angeben

Manche URLs sind mit HTTP-Au­then­ti­fi­zie­rung vor un­er­laub­tem Zugriff gesichert. Was jedoch, wenn Sie mit cURL auf eine derartige URL zugreifen möchten? Ohne Angabe von Nut­zer­na­me 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"
Tipp

Sie können cURL auch nutzen, um Daten von einem FTP-Server abzurufen. Verwenden Sie dafür ebenfalls die Option --user, um Be­nut­zer­na­me und Passwort anzugeben.

Proxy mit cURL verwenden

Ein Proxy ist ein zwi­schen­ge­schal­te­ter Server. Der Einsatz eines Proxys kann aus ver­schie­de­nen Gründen sinnvoll sein. Bei­spiels­wei­se lassen sich bestimmte Si­cher­heits- und Per­for­manz-An­for­de­run­gen durch Nutzung eines Proxys besser rea­li­sie­ren.

Wenn Sie sich über einen Proxy mit dem Internet verbinden, müssen Sie cURL darüber in­for­mie­ren. 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"
Hinweis

Sofern Sie für den Proxy-Server Nut­zer­na­me und Passwort angeben müssen, verwenden Sie zu­sätz­lich die Option '--proxy-user'. Geben Sie in diesem Fall Nut­zer­na­me und Passwort im Format 'nutzer:passwort' an.

Zum Hauptmenü