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:
| Option | Beschreibung |
|---|---|
-o | Ausgabe in Datei mit eigenem Namen speichern |
-O | Ausgabe in Datei mit Original-Namen speichern |
-L | Weiterleitungen folgen |
-I | Nur HTTP-Header abrufen |
-s | Stille Ausgabe (keine Fortschrittsanzeige) |
-d | POST-Daten senden |
-H | HTTP-Header setzen |
-u | Benutzername 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.