Der Befehl curl überträgt Daten zwischen deinem Rechner und einem Server. Er unterstützt zahlreiche Protokolle wie HTTP, HTTPS, FTP, SFTP und SCP und eignet sich sowohl zum Herunterladen als auch zum Hochladen von Dateien.

Syntax des curl-Befehls

curl [OPTIONEN] URL...
  • OPTIONEN - Flags, die das Verhalten steuern (Ausgabedatei, Authentifizierung, Header usw.)
  • URL - Eine oder mehrere Adressen, von denen Daten abgerufen werden sollen

Installation

Auf den meisten Distributionen ist curl bereits vorinstalliert. Prüfe mit folgendem Befehl, ob es verfügbar ist:

curl --version

Falls nicht installiert, kannst du es über den Paketmanager nachinstallieren:

# Ubuntu/Debian
sudo apt install curl

# Fedora/CentOS
sudo dnf install curl

Grundlegende Verwendung

Ohne weitere Optionen gibt curl den Inhalt einer URL direkt im Terminal aus:

curl https://example.com

Dieser Befehl ruft den HTML-Quellcode der Webseite ab und zeigt ihn an. Wenn du kein Protokoll angibst, nimmt curl standardmäßig HTTP an.

Ausgabe in Datei speichern

Mit der Option -o legst du den Dateinamen selbst fest:

curl -o bootstrap.min.css https://cdn.jsdelivr.net/npm/bootstrap@5.3/dist/css/bootstrap.min.css

Die Option -O (Großbuchstabe) übernimmt den ursprünglichen Dateinamen aus der URL:

curl -O https://cdn.jsdelivr.net/npm/bootstrap@5.3/dist/css/bootstrap.min.css

Mehrere Dateien herunterladen

Für mehrere Downloads verwendest du die Option -O mehrfach:

curl -O https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso \
     -O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.4.0-amd64-netinst.iso

Unterbrochenen Download fortsetzen

Die Option -C - setzt einen abgebrochenen Download fort. Das ist besonders bei großen Dateien nützlich, wenn die Verbindung abbricht:

curl -C - -O https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso

Der Bindestrich nach -C weist curl an, die Fortsetzungsposition automatisch zu ermitteln.

HTTP-Header abrufen

Mit der Option -I holst du nur die HTTP-Header einer Ressource, ohne den eigentlichen Inhalt herunterzuladen:

curl -I https://www.kernel.org

Die Ausgabe zeigt Informationen wie Statuscode, Content-Type, Server und Cache-Einstellungen.

HTTP/2-Unterstützung prüfen

Um zu testen, ob ein Server HTTP/2 unterstützt, kombinierst du die Header-Abfrage mit grep:

curl -I --http2 -s https://www.kernel.org | grep -i "^http"

Bei HTTP/2-Unterstützung siehst du HTTP/2 200, andernfalls HTTP/1.1 200.

Weiterleitungen folgen

Standardmäßig folgt curl keinen HTTP-Weiterleitungen. Die Option -L ändert das:

curl -L http://github.com

Ohne -L erhältst du bei einer Weiterleitung nur den Statuscode 301 oder 302. Mit -L folgt curl der Weiterleitung bis zum endgültigen Ziel.

User-Agent ändern

Manche Server liefern je nach Browser unterschiedliche Inhalte oder blockieren bestimmte User-Agents. Mit der Option -A kannst du einen anderen Browser simulieren:

curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0" https://www.example.com

Downloadgeschwindigkeit begrenzen

Die Option --limit-rate beschränkt die Bandbreite. Die Angabe erfolgt in Bytes, mit den Suffixen k, m oder g für Kilobyte, Megabyte oder Gigabyte:

curl --limit-rate 500k -O https://speed.hetzner.de/100MB.bin

Dieser Befehl begrenzt den Download auf 500 KB/s und verhindert, dass curl die gesamte Bandbreite beansprucht.

FTP-Zugriff mit Authentifizierung

Für FTP-Server mit Passwortschutz verwendest du die Option -u:

curl -u benutzername:passwort ftp://ftp.example.com/

Eine Datei vom FTP-Server herunterladen:

curl -u benutzername:passwort -O ftp://ftp.example.com/backups/datenbank.sql.gz

Eine Datei auf den FTP-Server hochladen:

curl -u benutzername:passwort -T lokale-datei.tar.gz ftp://ftp.example.com/uploads/

Cookies mitsenden

Manche Ressourcen erfordern bestimmte Cookies. Mit der Option -b sendest du Cookies als String:

curl -b "session=abc123; user=admin" https://example.com/dashboard

Alternativ kannst du Cookies aus einer Datei laden:

curl -b cookies.txt https://example.com/dashboard

Proxy verwenden

Die Option -x leitet Anfragen über einen Proxy-Server:

curl -x 192.168.1.100:8080 https://example.com

Falls der Proxy eine Authentifizierung verlangt, ergänzt du die Option -U:

curl -x 192.168.1.100:8080 -U proxyuser:proxypass https://example.com

POST-Anfragen senden

Mit der Option -d sendest du Daten per POST-Methode:

curl -d "name=Max&email=max@example.com" https://example.com/formular

Für JSON-Daten setzt du zusätzlich den Content-Type-Header:

curl -H "Content-Type: application/json" -d '{"name":"Max","email":"max@example.com"}' https://api.example.com/users

Stille Ausgabe

Die Option -s unterdrückt Fortschrittsanzeige und Fehlermeldungen. Das ist nützlich in Skripten:

curl -s https://api.example.com/status | jq .

Mit -S werden Fehler trotz stillem Modus angezeigt:

curl -sS https://api.example.com/status

SSL-Zertifikate ignorieren

Falls ein Server ein selbstsigniertes oder abgelaufenes Zertifikat verwendet, kannst du die Prüfung mit -k überspringen:

curl -k https://localhost:8443/api

Vorsicht: Verwende diese Option nur in Testumgebungen. In Produktivumgebungen sollten Zertifikatsfehler nicht ignoriert werden.

Zusammenfassung

Der Befehl curl ist ein vielseitiges Werkzeug für HTTP-Anfragen, Dateidownloads und API-Tests. Die wichtigsten Optionen im Überblick:

OptionBeschreibung
-oAusgabe in Datei mit eigenem Namen speichern
-OAusgabe in Datei mit Original-Namen speichern
-LWeiterleitungen folgen
-INur HTTP-Header abrufen
-sStille Ausgabe (keine Fortschrittsanzeige)
-dPOST-Daten senden
-HHTTP-Header setzen
-uBenutzername und Passwort für Authentifizierung
-C -Unterbrochenen Download fortsetzen

Weitere Optionen findest du in der Manpage mit man curl oder in der Online-Dokumentation unter curl.se.

Verwandte Artikel