curl-Befehle: Beispiele für API, Download und TLS

curl-Befehle mit Beispielen zum Kopieren: GET, POST mit JSON, Header, Upload, Cookies, Proxy, TLS-Prüfung, Download fortsetzen und die wichtigsten Exit-Codes.

64 Einträge

Grundlagen und Ausgabe

curl https://example.comEinfache GET-Anfrage, die Antwort erscheint im Terminal
curl -i https://example.comAntwort mit Antwort-Headern ausgeben
curl -I https://example.comNur die Header abrufen (HEAD-Anfrage)
curl -v https://example.comAusführlich: Verbindung, TLS-Handshake, Anfrage- und Antwort-Header
curl -sS https://example.comOhne Fortschrittsanzeige, Fehlermeldungen erscheinen trotzdem
curl -L https://example.comWeiterleitungen (301, 302 …) folgen
curl -f https://example.com/apiBei HTTP-Status ab 400 mit Exit-Code 22 abbrechen; --fail-with-body zeigt die Antwort trotzdem
curl -s -o /dev/null -w '%{http_code}\n' https://example.comNur den Statuscode ausgeben
curl -s -o /dev/null -w '%{time_connect} %{time_starttransfer} %{time_total}\n' https://example.comZeiten messen: Verbindung, erstes Byte, gesamt
curl -D header.txt https://example.comAntwort-Header zusätzlich in eine Datei schreiben
curl --trace-ascii trace.txt https://example.comVollständigen Mitschnitt aller gesendeten und empfangenen Daten speichern

Download

curl -O https://example.com/datei.zipcurl Download: unter dem Dateinamen aus der URL speichern
curl -o paket.zip https://example.com/downloadUnter eigenem Namen speichern
curl -OJ https://example.com/download?id=7Dateinamen aus dem Header Content-Disposition übernehmen
curl -C - -O https://example.com/gross.isoAbgebrochenen Download fortsetzen
curl --limit-rate 1M -O https://example.com/gross.isoBandbreite auf 1 MB/s begrenzen
curl -r 0-1023 https://example.com/datei.binNur einen Byte-Bereich abrufen (Range)
curl --create-dirs -o daten/2026/datei.csv https://example.com/datei.csvFehlende Ordner anlegen
curl -Z -O https://example.com/a.zip -O https://example.com/b.zipMehrere Downloads parallel (ab 7.66)
curl --retry 5 --retry-delay 2 -O https://example.com/datei.zipBei vorübergehenden Fehlern bis zu fünfmal neu versuchen

Daten senden

curl --json '{"name":"Ada"}' https://example.com/apicurl POST JSON: setzt Content-Type und Accept auf application/json (ab 7.82)
curl -H 'Content-Type: application/json' -d '{"name":"Ada"}' https://example.com/apiJSON per POST für ältere curl-Versionen
curl -d @daten.json -H 'Content-Type: application/json' https://example.com/apiDaten aus einer Datei senden
curl -d 'name=Ada&alter=36' https://example.com/formFormulardaten (application/x-www-form-urlencoded); -d macht daraus automatisch POST
curl --data-urlencode 'q=Grüße & mehr' https://example.com/sucheWert vor dem Senden URL-kodieren
curl -G -d 'q=test' -d 'seite=2' https://example.com/sucheDaten als Query-String an eine GET-Anfrage hängen
curl --url-query 'q=a b' https://example.com/sucheQuery-Parameter kodiert anhängen (ab 7.87)
curl -X PUT --json '{"aktiv":true}' https://example.com/api/7PUT-Anfrage; genauso -X PATCH
curl -X DELETE https://example.com/api/7DELETE-Anfrage
curl -F 'datei=@bild.png' https://example.com/uploadDatei als multipart/form-data hochladen
curl -F 'datei=@bericht.pdf;type=application/pdf' -F 'titel=Q3' https://example.com/uploadDatei mit MIME-Typ und weiterem Feld hochladen
curl -T datei.txt https://example.com/ablage/Datei per PUT hochladen

Header, Anmeldung, Cookies

curl -H 'Accept: application/json' https://example.com/apicurl Header setzen; -H mehrfach verwenden für mehrere
curl -H 'Authorization: Bearer TOKEN' https://example.com/apiBearer-Token mitsenden
curl --oauth2-bearer TOKEN https://example.com/apiKurzform für den Bearer-Token
curl -u benutzer https://example.com/internBasic Auth; curl fragt das Passwort ab, es landet so nicht in der Shell-Historie
curl -A 'MeinSkript/1.0' https://example.comUser-Agent setzen
curl -e https://example.com/start https://example.com/seiteReferer setzen
curl --compressed https://example.comKomprimierte Antwort anfordern und automatisch entpacken
curl -b 'sitzung=abc123' https://example.comCookie mitsenden
curl -c cookies.txt -b cookies.txt https://example.com/loginCookies speichern und bei der nächsten Anfrage wieder senden
curl -H 'Host: neu.example.com' http://203.0.113.10/Anderen Host-Header senden, etwa zum Testen eines virtuellen Hosts

Netzwerk und TLS

curl --resolve example.com:443:203.0.113.10 https://example.com/Domain ohne DNS auf eine bestimmte IP leiten, TLS bleibt korrekt
curl --connect-to example.com:443:neu.example.net:443 https://example.com/Verbindung zu anderem Server umleiten, Hostname der URL bleibt
curl -x http://proxy:3128 https://example.comÜber einen Proxy verbinden
curl -4 https://example.comNur IPv4 verwenden; -6 nur IPv6
curl --http2 https://example.comHTTP/2 verwenden; --http1.1 erzwingt HTTP/1.1, --http3 nur wenn curl mit HTTP/3 gebaut ist
curl --connect-timeout 5 --max-time 30 https://example.comZeitlimits für Verbindungsaufbau und gesamte Anfrage
curl --cacert ca.pem https://intern.exampleEigene Zertifizierungsstelle verwenden
curl --cert client.pem --key client.key https://example.comMit Client-Zertifikat anmelden (mTLS)
curl --tlsv1.3 https://example.comMindestens TLS 1.3 verlangen
curl -vI https://example.com 2>&1 | grep -i 'expire date'Ablaufdatum des Serverzertifikats anzeigen
curl -k https://localhost:8443Zertifikatsprüfung abschalten: nur zum Testen, nie in Produktion
curl --unix-socket /var/run/docker.sock http://localhost/versionÜber einen Unix-Socket sprechen, hier mit der Docker-API

Exit-Codes von curl

3URL hat ein ungültiges Format
6Rechnername konnte nicht aufgelöst werden
7Verbindung zum Server fehlgeschlagen
22HTTP-Status ab 400, nur mit -f
28Zeitlimit überschritten
35Fehler im TLS-Handshake
47Zu viele Weiterleitungen
52Server hat leer geantwortet
56Fehler beim Empfangen von Daten, etwa Verbindung abgebrochen
60Zertifikat des Servers konnte nicht geprüft werden

Alles läuft in Ihrem Browser. Eingaben verlassen Ihr Gerät nicht.

curl im Alltag

Diese Sammlung enthält 64 curl-Befehle und Exit-Codes, sortiert nach Aufgaben: Ausgabe und Fehlersuche, Download, Daten senden, curl Header und Anmeldung, Cookies sowie Netzwerk und TLS. Alle curl Beispiele lassen sich kopieren; ersetzen Sie dann nur URL, Daten und Zugangsdaten.

curl ist auf Linux, macOS und Windows vorinstalliert und eignet sich, um APIs zu testen und Dateien in Skripten zu laden. Mit -v sehen Sie, was genau gesendet wird; das ist bei Fehlern der wichtigste Schalter. Für curl POST JSON gibt es seit Version 7.82 die Option --json, die Daten sendet und beide Header setzt. Für einen curl Download in Skripten bewährt sich -fsSL: Fehler erkennen, Fortschritt ausblenden, Fehlermeldungen zeigen und Weiterleitungen folgen.

Passwörter und Tokens direkt in der Befehlszeile landen in der Shell-Historie und sind in der Prozessliste sichtbar. Nutzen Sie lieber -u benutzer mit Abfrage, eine .netrc-Datei oder Umgebungsvariablen. Den fertigen Befehl wandeln Sie mit cURL in fetch oder cURL in Python in Code um. Wer ein englisches curl Cheat Sheet sucht, findet hier dieselben Optionen mit deutscher Erklärung.

Anleitung: curl-Befehle in 4 Schritten

  1. Suchen Sie nach dem, was Sie senden wollen, etwa „JSON“, „Upload“ oder „Cookie“.
  2. Kopieren Sie den Befehl mit „Kopieren“ und ersetzen Sie URL, Daten und Zugangsdaten.
  3. Fügen Sie bei Problemen -v hinzu und schlagen Sie den Exit-Code in der Gruppe „Exit-Codes“ nach.
  4. Wandeln Sie den fertigen Befehl bei Bedarf mit dem cURL-in-fetch-Werkzeug in JavaScript um.

Typische Anwendungsfälle

  • Eine REST-API testen, bevor Code dafür geschrieben wird.
  • Antwort-Header, Weiterleitungen und TLS-Zertifikat eines Servers prüfen.
  • Dateien in Skripten herunterladen, mit Wiederholungen und Zeitlimit.
  • Anfragen aus den Entwicklerwerkzeugen des Browsers („Copy as cURL“) nachstellen und verändern.
Fragen

Häufige Fragen

Wie sende ich mit curl JSON per POST?

Ab curl 7.82: curl --json '{"name":"Ada"}' URL. In älteren Versionen: curl -H 'Content-Type: application/json' -d '{"name":"Ada"}' URL. Längere Daten legen Sie in eine Datei und senden sie mit -d @daten.json.

Was ist der Unterschied zwischen -o und -O?

-o name speichert unter einem selbst gewählten Namen, -O übernimmt den Dateinamen aus der URL. Mit -OJ nutzt curl den Namen, den der Server im Header Content-Disposition vorschlägt.

Wie sehe ich die Antwort-Header?

Mit -i erscheinen Header und Inhalt, mit -I nur die Header über eine HEAD-Anfrage. -v zeigt zusätzlich die gesendeten Anfrage-Header und den TLS-Handshake.

Warum ist curl -k gefährlich?

-k bzw. --insecure schaltet die Zertifikatsprüfung ab. Dann kann sich jeder als der Server ausgeben, auch mitten im Netz. Für eigene Testzertifikate ist --cacert mit der eigenen CA die bessere Lösung.

Warum gibt curl bei 404 keinen Fehler zurück?

Für curl ist eine HTTP-Antwort mit Status 404 oder 500 eine erfolgreiche Übertragung, der Exit-Code ist 0. Mit -f bzw. --fail endet curl bei Status ab 400 mit Exit-Code 22; --fail-with-body gibt zusätzlich den Antworttext aus.

Gibt es curl auch unter Windows?

Ja, Windows 10 ab Version 1803 und Windows 11 bringen curl.exe mit. In Windows PowerShell 5.1 ist curl aber ein Alias für Invoke-WebRequest; rufen Sie dort ausdrücklich curl.exe auf.

Weitere Werkzeuge

Das könnte auch helfen

Alle 558 Werkzeuge