Was ist curl? Einsatz und sichere Nutzung

Autor: Veröffentlicht

Kurz gesagt: curl ist ein Kommandozeilenwerkzeug zur Datenübertragung zwischen einem Computer und einem Server. Damit kannst du unter anderem Dateien herunterladen, die Antwort einer Website prüfen und Daten an eine API senden, also eine Schnittstelle für die Kommunikation zwischen Programmen. Es funktioniert ohne grafischen Browser und eignet sich deshalb für Diagnose und Automatisierung.

Wozu dient curl und wie unterscheidet es sich von einem Browser?

Du startest curl im Terminal: Du gibst einen Befehl, eine Adresse und bei Bedarf Parameter ein, die das Verhalten festlegen. Das Werkzeug unterstützt verschiedene Kommunikationsprotokolle, darunter HTTP und HTTPS, die von Websites genutzt werden. In der Praxis wird es häufig zum Prüfen von Webdiensten und für die Arbeit mit API verwendet.

Ein Browser lädt eine Seite herunter, interpretiert ihren Code und stellt die Benutzeroberfläche dar. curl gibt die empfangenen Daten standardmäßig im Terminal aus – beispielsweise HTML-Code oder eine Antwort im Format JSON. Das ist ein textbasiertes Datenformat, das viele API verwenden. curl führt keinen Code in JavaScriptu aus und rendert die Seite nicht. Es ersetzt daher keinen Test des Aussehens und der Funktion einer Seite im Browser.

Wenn beispielsweise ein Formular auf einer Website nicht funktioniert, kann curl dabei helfen zu prüfen, ob der Server die Anfrage annimmt und wie er darauf antwortet. Es zeigt jedoch nicht, ob die Schaltfläche des Formulars korrekt mit dem JavaScript-Code verknüpft ist.

Zu curl gehört die Bibliothek libcurl, die Entwickler in ihren eigenen Anwendungen einsetzen können. Der Befehl curl ist ein fertiges Programm; libcurl stellt Funktionen bereit, mit denen sich Software zur Datenübertragung entwickeln lässt.

Wie prüfst du, ob curl verfügbar ist, und sendest die erste Anfrage?

Öffne das Terminal und gib Folgendes ein:

curl --version

Wenn curl verfügbar ist, siehst du die Versionsnummer und Informationen zu den unterstützten Funktionen. Falls das System den Befehl nicht erkennt, installiere das Werkzeug über den Paketmanager deines Systems oder nach der offiziellen Anleitung des Projekts curl. Welche Protokolle und Optionen verfügbar sind, kann von der Version und davon abhängen, wie das Programm gebaut wurde.

In einigen älteren Windows-PowerShell-Umgebungen kann der Name curl auf einen anderen Befehl verweisen. Verwende in diesem Fall curl.exe, um das richtige Programm aufzurufen.

Die einfachste Anfrage sieht so aus:

curl https://example.com

Bei einer HTTP- oder HTTPS-Adresse sendet curl standardmäßig eine GET-Anfrage, die eine Ressource abruft. Die Antwort wird auf der Standardausgabe ausgegeben, meist im Terminal. Setze Adressen mit Sonderzeichen wie & in Anführungszeichen, damit die Shell sie nicht als Bestandteil ihrer eigenen Syntax interpretiert.

Wie prüfst du Header und Weiterleitungen?

HTTP-Header enthalten begleitende Informationen zu einer Anfrage oder Antwort, etwa den Typ des übertragenen Inhalts und Anweisungen für den Cache. Um vom Server nur die Antwort-Header anzufordern, verwende:

curl -I https://example.com

Die Option -I sendet eine HEAD-Anfrage. Nicht jeder Server verarbeitet sie genauso wie GET. Wenn du die Antwort-Header eines normalen Seitenabrufs zusammen mit dem Inhalt sehen möchtest, verwende -i.

curl folgt HTTP-Weiterleitungen standardmäßig nicht. Mit der Option -L wird die vom Server angegebene Adresse aufgerufen:

curl -i -L https://example.com

Der Statuscode 200 steht normalerweise für eine erfolgreiche Antwort, 404 für eine nicht vorhandene Ressource und 500 für einen serverseitigen Fehler. Der Statuscode allein beweist jedoch nicht, dass die Seite richtig funktioniert: Eine Antwort mit 200 kann statt der erwarteten Daten eine Fehlermeldung enthalten.

Für eine genauere Diagnose dient -v. Diese Option zeigt unter anderem Verbindungsdetails und die ausgetauschten Header. Entferne Tokens, Cookies und andere vertrauliche Informationen, bevor du eine solche Ausgabe weitergibst.

Wie lädst du eine Datei herunter und sendest Daten an eine API?

Um die Antwort in einer Datei zu speichern, statt sie im Terminal anzuzeigen, verwende die Option -o:

curl -f -L -o dokument.pdf https://example.com/dokument.pdf

Dies ist ein Syntaxbeispiel – die angegebene Datei muss nicht existieren. -o legt den lokalen Dateinamen fest, -L folgt Weiterleitungen und -f meldet bei HTTP-Antworten, die einen Fehlschlag anzeigen, einen Fehler – grundsätzlich ab Statuscode 400. Ohne -f kann curl erfolgreich beendet werden, obwohl eine Fehlerseite empfangen wurde. Beim Speichern in einer vorhandenen Datei kann deren Inhalt überschrieben werden.

Das Senden von Daten an eine API kann so aussehen:

curl -i https://api.example.com/items -H "Content-Type: application/json" --data '{"name":"test"}'

Die Option -H fügt einen Header hinzu. --data übergibt den Inhalt der Anfrage und wählt standardmäßig die Methode POST, die häufig zum Senden von Daten verwendet wird. Dieses Beispiel setzt ein Terminal voraus, das die Syntax der Bash-Shell unterstützt; unter Windows können andere Regeln für Anführungszeichen gelten. Die tatsächliche Adresse, die erforderlichen Felder und das Authentifizierungsverfahren findest du in der Dokumentation der jeweiligen API.

Wie verwendest du curl sicher?

curl kann nicht nur Daten lesen, sondern auch Vorgänge ausführen, die den Zustand eines Dienstes verändern. Prüfe die Zieladresse, die übertragenen Daten und die Optionen, bevor du einen fremden Befehl ausführst. Ein API-Aufruf kann einen Datensatz anlegen, eine Ressource löschen oder einen kostenpflichtigen Vorgang auslösen.

Verwende die Option -k beziehungsweise --insecure nicht routinemäßig: Sie deaktiviert die Prüfung des TLS-Zertifikats, das dabei hilft, die Identität des Servers zu bestätigen. Es ist besser, die Ursache eines Zertifikatsfehlers zu klären, als ihn zu verbergen. Führe auch kein heruntergeladenes Skript aus, ohne seinen Inhalt zu prüfen – insbesondere nicht mit einem Befehl, der curl direkt mit der Shell verbindet.

Rufe zum Einstieg mit curl -i eine öffentlich zugängliche Ressource ab und prüfe den Statuscode sowie die Header. Gehe erst danach zu Anfragen über, die Daten senden.

Siehe auch: Was ist eine API?

Lesen Sie auch

Wie PHP-FPM PHP-Anfragen verarbeitet, sich vom Webserver unterscheidet und wie du Prozesse an Last und Hosting-Ressourcen anpasst.
BIND ist offene DNS-Serversoftware. Erfahre, welche Aufgaben sie übernimmt und wann sich der Betrieb eines eigenen Servers lohnt.
Was Polens REGON-Register und seine Kennnummer bedeuten, wie sie sich von NIP und KRS unterscheiden und wie Sie Unternehmensdaten prüfen.