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 Terminalcurl -i https://example.comAntwort mit Antwort-Headern ausgebencurl -I https://example.comNur die Header abrufen (HEAD-Anfrage)curl -v https://example.comAusführlich: Verbindung, TLS-Handshake, Anfrage- und Antwort-Headercurl -sS https://example.comOhne Fortschrittsanzeige, Fehlermeldungen erscheinen trotzdemcurl -L https://example.comWeiterleitungen (301, 302 …) folgencurl -f https://example.com/apiBei HTTP-Status ab 400 mit Exit-Code 22 abbrechen; --fail-with-body zeigt die Antwort trotzdemcurl -s -o /dev/null -w '%{http_code}\n' https://example.comNur den Statuscode ausgebencurl -s -o /dev/null -w '%{time_connect} %{time_starttransfer} %{time_total}\n' https://example.comZeiten messen: Verbindung, erstes Byte, gesamtcurl -D header.txt https://example.comAntwort-Header zusätzlich in eine Datei schreibencurl --trace-ascii trace.txt https://example.comVollständigen Mitschnitt aller gesendeten und empfangenen Daten speichernDownload
curl -O https://example.com/datei.zipcurl Download: unter dem Dateinamen aus der URL speicherncurl -o paket.zip https://example.com/downloadUnter eigenem Namen speicherncurl -OJ https://example.com/download?id=7Dateinamen aus dem Header Content-Disposition übernehmencurl -C - -O https://example.com/gross.isoAbgebrochenen Download fortsetzencurl --limit-rate 1M -O https://example.com/gross.isoBandbreite auf 1 MB/s begrenzencurl -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 anlegencurl -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 versuchenDaten 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-Versionencurl -d @daten.json -H 'Content-Type: application/json' https://example.com/apiDaten aus einer Datei sendencurl -d 'name=Ada&alter=36' https://example.com/formFormulardaten (application/x-www-form-urlencoded); -d macht daraus automatisch POSTcurl --data-urlencode 'q=Grüße & mehr' https://example.com/sucheWert vor dem Senden URL-kodierencurl -G -d 'q=test' -d 'seite=2' https://example.com/sucheDaten als Query-String an eine GET-Anfrage hängencurl --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 PATCHcurl -X DELETE https://example.com/api/7DELETE-Anfragecurl -F 'datei=@bild.png' https://example.com/uploadDatei als multipart/form-data hochladencurl -F 'datei=@bericht.pdf;type=application/pdf' -F 'titel=Q3' https://example.com/uploadDatei mit MIME-Typ und weiterem Feld hochladencurl -T datei.txt https://example.com/ablage/Datei per PUT hochladenHeader, Anmeldung, Cookies
curl -H 'Accept: application/json' https://example.com/apicurl Header setzen; -H mehrfach verwenden für mehrerecurl -H 'Authorization: Bearer TOKEN' https://example.com/apiBearer-Token mitsendencurl --oauth2-bearer TOKEN https://example.com/apiKurzform für den Bearer-Tokencurl -u benutzer https://example.com/internBasic Auth; curl fragt das Passwort ab, es landet so nicht in der Shell-Historiecurl -A 'MeinSkript/1.0' https://example.comUser-Agent setzencurl -e https://example.com/start https://example.com/seiteReferer setzencurl --compressed https://example.comKomprimierte Antwort anfordern und automatisch entpackencurl -b 'sitzung=abc123' https://example.comCookie mitsendencurl -c cookies.txt -b cookies.txt https://example.com/loginCookies speichern und bei der nächsten Anfrage wieder sendencurl -H 'Host: neu.example.com' http://203.0.113.10/Anderen Host-Header senden, etwa zum Testen eines virtuellen HostsNetzwerk und TLS
curl --resolve example.com:443:203.0.113.10 https://example.com/Domain ohne DNS auf eine bestimmte IP leiten, TLS bleibt korrektcurl --connect-to example.com:443:neu.example.net:443 https://example.com/Verbindung zu anderem Server umleiten, Hostname der URL bleibtcurl -x http://proxy:3128 https://example.comÜber einen Proxy verbindencurl -4 https://example.comNur IPv4 verwenden; -6 nur IPv6curl --http2 https://example.comHTTP/2 verwenden; --http1.1 erzwingt HTTP/1.1, --http3 nur wenn curl mit HTTP/3 gebaut istcurl --connect-timeout 5 --max-time 30 https://example.comZeitlimits für Verbindungsaufbau und gesamte Anfragecurl --cacert ca.pem https://intern.exampleEigene Zertifizierungsstelle verwendencurl --cert client.pem --key client.key https://example.comMit Client-Zertifikat anmelden (mTLS)curl --tlsv1.3 https://example.comMindestens TLS 1.3 verlangencurl -vI https://example.com 2>&1 | grep -i 'expire date'Ablaufdatum des Serverzertifikats anzeigencurl -k https://localhost:8443Zertifikatsprüfung abschalten: nur zum Testen, nie in Produktioncurl --unix-socket /var/run/docker.sock http://localhost/versionÜber einen Unix-Socket sprechen, hier mit der Docker-APIExit-Codes von curl
3URL hat ein ungültiges Format6Rechnername konnte nicht aufgelöst werden7Verbindung zum Server fehlgeschlagen22HTTP-Status ab 400, nur mit -f28Zeitlimit überschritten35Fehler im TLS-Handshake47Zu viele Weiterleitungen52Server hat leer geantwortet56Fehler beim Empfangen von Daten, etwa Verbindung abgebrochen60Zertifikat des Servers konnte nicht geprüft werdenKein Eintrag gefunden. Versuchen Sie einen anderen Begriff oder wählen Sie „Alle Gruppen“.
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
- Suchen Sie nach dem, was Sie senden wollen, etwa „JSON“, „Upload“ oder „Cookie“.
- Kopieren Sie den Befehl mit „Kopieren“ und ersetzen Sie URL, Daten und Zugangsdaten.
- Fügen Sie bei Problemen
-vhinzu und schlagen Sie den Exit-Code in der Gruppe „Exit-Codes“ nach. - 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.
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.
Das könnte auch helfen
HTTP-Statuscodes
Alle gängigen HTTP-Statuscodes von 100 bis 511 mit Bedeutung, typischer Ursache und Suche.
ÖffnenHTTP-Header-Referenz
Wichtige Anfrage- und Antwort-Header mit Bedeutung und Beispiel, durchsuchbar.
ÖffnenMIME-Typen
Über 150 MIME-Typen nachschlagen: Dateiendung zu Content-Type und umgekehrt.
ÖffnenGit-Befehle
Git-Spickzettel: die wichtigsten Befehle nach Aufgaben gruppiert, durchsuchbar und kopierbar.
ÖffnenBash-Befehle
Bash- und Linux-Befehle für Dateien, Text, Prozesse und Netzwerk, mit Suche und Kopieren.
ÖffnenPort-Liste
Bekannte TCP- und UDP-Ports von 20 bis 51820 mit Dienst und Hinweis, durchsuchbar.
Öffnen