Netzwerk
curl-Exit-Code-Referenz
Vollständige Referenz der curl-Exit-Codes mit Bedeutung, häufigen Ursachen und Lösungen für Entwickler, die CI/CD-Pipelines und Shell-Skripte debuggen. Enthält ein Nachschlage-Tool — Codenummer eingeben und sofort die Details anzeigen.
| Code | Konstantenname | Bedeutung | Häufige Ursachen |
|---|---|---|---|
| Verbindungs-/Initialisierungsfehler | |||
| 1 | CURLE_UNSUPPORTED_PROTOCOL | Zeigt an, dass curl das in der URL angegebene Protokoll nicht unterstützt. | Tritt auf, wenn eine curl-Binärdatei verwendet wird, in der dieses Protokoll (z. B. gopher, ldap) beim Build deaktiviert wurde, oder bei einem Tippfehler im URL-Schema. |
| 2 | CURLE_FAILED_INIT | Zeigt an, dass die interne Initialisierung von curl fehlgeschlagen ist. | Ein seltener Initialisierungsfehler auf niedriger Ebene, meist verursacht durch Speichermangel oder eine anomale Umgebung. |
| 3 | CURLE_URL_MALFORMAT | Zeigt an, dass die angegebene URL fehlerhaft ist und von curl nicht interpretiert werden kann. | Tritt auf, wenn der URL das Schema fehlt (z. B. http://) oder sie ungültige Zeichen enthält. |
| 5 | CURLE_COULDNT_RESOLVE_PROXY | Zeigt an, dass curl den Hostnamen des angegebenen Proxy-Servers nicht auflösen konnte. | Verursacht durch einen Tippfehler im mit --proxy angegebenen Hostnamen oder einen DNS-Fehler speziell des Proxys. |
| 6 | CURLE_COULDNT_RESOLVE_HOST | Zeigt an, dass curl den Hostnamen des Zielservers nicht (per DNS) auflösen konnte. | Meist verursacht durch einen Tippfehler im Domainnamen, einen Ausfall des DNS-Servers oder die Ausführung in einer Offline-Umgebung. |
| 7 | CURLE_COULDNT_CONNECT | Zeigt an, dass der Hostname zwar aufgelöst wurde, curl aber keine TCP-Verbindung zum Server herstellen konnte. | Tritt durch eine falsche Portnummer, eine Blockierung durch eine Firewall oder einen ausgefallenen Server auf. |
| 8 | CURLE_WEIRD_SERVER_REPLY | Zeigt an, dass curl vom Server eine unerwartete Antwort erhielt, die nicht interpretiert werden konnte. | Häufig, wenn ein FTP-Server eine nicht standardkonforme Antwort zurückgibt, oder wenn curl versehentlich mit einem Server verbunden wird, der ein anderes Protokoll spricht. |
| 9 | CURLE_REMOTE_ACCESS_DENIED | Zeigt an, dass curl eine Verbindung zum Server herstellen konnte, der Zugriff jedoch verweigert wurde. | Tritt bei unzureichenden Berechtigungen für ein FTP-Verzeichnis oder bei einer serverseitigen IP-Beschränkung auf. |
| Datenübertragungsfehler | |||
| 18 | CURLE_PARTIAL_FILE | Zeigt an, dass die Übertragung vor Abschluss unterbrochen wurde und nur ein Teil der Datei empfangen werden konnte. | Tritt durch eine kurze Netzwerkunterbrechung auf, oder wenn der Server die Verbindung schließt, bevor die angekündigte Content-Length erreicht wurde. |
| 23 | CURLE_WRITE_ERROR | Zeigt an, dass das Schreiben von Daten auf die lokale Festplatte oder an das Callback-Ziel fehlgeschlagen ist. | Tritt auf, wenn der Speicherplatz voll ist oder curl keine Schreibberechtigung für die Ausgabedatei hat. |
| 26 | CURLE_READ_ERROR | Zeigt an, dass das Lesen der hochzuladenden lokalen Datei fehlgeschlagen ist. | Tritt auf, wenn die mit -T/--upload-file angegebene Datei nicht existiert oder curl keine Leseberechtigung dafür hat. |
| 52 | CURLE_GOT_NOTHING | Zeigt an, dass curl eine Verbindung zum Server herstellen konnte, aber überhaupt keine Antwort erhielt. | Meist verursacht durch einen Absturz des Serverprozesses mitten in der Anfrage, oder eine Fehlkonfiguration, die eine leere Antwort zurückgibt. |
| 55 | CURLE_SEND_ERROR | Zeigt an, dass das Senden von Daten über das Netzwerk fehlgeschlagen ist. | Tritt auf, wenn die Gegenseite die Verbindung sofort nach dem Aufbau trennt, oder aufgrund eines Problems mit der lokalen Netzwerkschnittstelle. |
| 56 | CURLE_RECV_ERROR | Zeigt an, dass der Empfang von Daten aus dem Netzwerk fehlgeschlagen ist. | Häufig zu beobachten, wenn die Gegenseite die Verbindung während der Übertragung unerwartet zurücksetzt (Connection reset by peer). |
| 63 | CURLE_FILESIZE_EXCEEDED | Zeigt an, dass die Dateigröße das mit --max-filesize festgelegte Limit überschritten hat. | Tritt auf, wenn die Antwort größer ausfällt als erwartet und das aus Sicherheitsgründen konfigurierte Limit erreicht. |
| 78 | CURLE_REMOTE_FILE_NOT_FOUND | Zeigt an, dass die angegebene Datei auf dem entfernten Server nicht existiert (z. B. bei FTP). | Tritt durch einen Tippfehler im FTP-Pfad auf, oder wenn die Zieldatei bereits gelöscht oder verschoben wurde. |
| SSL/TLS-Zertifikatsfehler | |||
| 35 | CURLE_SSL_CONNECT_ERROR | Zeigt an, dass während des SSL/TLS-Handshakes ein Problem aufgetreten ist, sodass die Verbindung nicht hergestellt werden konnte. | Häufig verursacht durch eine Diskrepanz zwischen den vom Server und vom Client unterstützten TLS-Versionen oder Cipher-Suites. |
| 51 | CURLE_PEER_FAILED_VERIFICATION | Zeigt an, dass die Überprüfung des Serverzertifikats fehlgeschlagen ist (z. B. stimmt der Zertifikatsinhalt nicht mit dem Hostnamen überein). | Tritt beim Zugriff auf ein selbstsigniertes Zertifikat auf, oder wenn der Common Name/SAN des Zertifikats vom Zielhostnamen abweicht. |
| 58 | CURLE_SSL_CERTPROBLEM | Zeigt ein Problem mit dem lokal angegebenen Client-Zertifikat an. | Meist verursacht durch ein ungültiges Format der mit --cert angegebenen Zertifikatsdatei oder eine falsch eingegebene Passphrase. |
| 60 | CURLE_SSL_CACERT | Zeigt an, dass die CA-Zertifikatskette zur Überprüfung des Serverzertifikats nicht bestätigt werden konnte. | Tritt auf, wenn das CA-Zertifikatspaket veraltet ist, oder eine selbstsignierte CA (etwa eines internen Proxys) nicht im Trust Store registriert ist. -k/--insecure ist ein Workaround, wird für den Produktionseinsatz jedoch nicht empfohlen. |
| HTTP-/Authentifizierungsfehler | |||
| 22 | CURLE_HTTP_RETURNED_ERROR | Zeigt an, dass bei angegebener Option -f/--fail die HTTP-Antwort einen Fehlerstatus von 400 oder höher zurückgegeben hat. | Wird absichtlich in CI/CD-Skripten ausgelöst, die curl -f verwenden, um einen API-Fehlerstatus als Fehlschlag zu erkennen. |
| 67 | CURLE_LOGIN_DENIED | Zeigt an, dass der Login (die Authentifizierung) beim Server abgelehnt wurde. | Meist verursacht durch einen falschen Benutzernamen oder ein falsches Passwort, oder eine Kontosperrung bei Protokollen wie FTP/SMTP. |
| Sonstige | |||
| 27 | CURLE_OUT_OF_MEMORY | Zeigt an, dass die Speicherzuweisung während der Ausführung von curl fehlgeschlagen ist. | Eine seltene Situation, etwa der Versuch, eine sehr große Datei auf einem speicherbegrenzten System zu verarbeiten. |
| 28 | CURLE_OPERATION_TIMEDOUT | Zeigt an, dass der Vorgang nicht innerhalb der mit --connect-timeout/--max-time usw. festgelegten Zeitgrenze abgeschlossen wurde. | Einer der häufigsten Fehler in CI, verursacht durch eine langsame Serverantwort, Netzwerklatenz oder einen zu kurz eingestellten Timeout-Wert. |
| 47 | CURLE_TOO_MANY_REDIRECTS | Zeigt an, dass die Anzahl der Weiterleitungen das mit --max-redirs festgelegte Limit überschritten hat. | Tritt bei einer Weiterleitungsschleife (301/302, die sich zirkulär weiterleiten) oder einer legitimen Weiterleitungskette auf, die länger ist als das Standardlimit (50). |
Tipps
- Den Exit Code können Sie direkt danach mit
$?(Bash) oder%errorlevel%(Windows) prüfen. In Shell-Skripten ist eine Verzweigung wiecurl ... || echo "failed with $?"ein praktisches Muster. - 28 (Timeout) und 7 (Verbindungsfehler) werden oft verwechselt: 28 tritt auf, wenn die Antwort nach dem Verbindungsaufbau langsam kommt, während 7 auftritt, wenn die TCP-Verbindung selbst gar nicht erst zustande kommt.
- Wenn 60 (CA-Zertifikatsfehler) auftritt, sollten Sie es nicht einfach mit
-k/--insecureumgehen — prüfen Sie zunächst, ob Ihr CA-Zertifikatspaket (ca-certificates) aktuell ist. Der routinemäßige Einsatz von -k in Produktionsumgebungen erhöht das Risiko von Man-in-the-Middle-Angriffen. - 22 (HTTP-Fehler) tritt nur auf, wenn Sie die Option
-f/--failhinzufügen. Ohne diese liefert curl auch bei einer 404- oder 500-Antwort den Exit Code 0 (Erfolg) zurück — fügen Sie -f daher immer hinzu, wenn CI Fehler erkennen soll.
FAQ
echo $? in Bash/Zsh, echo %errorlevel% in der Windows-Eingabeaufforderung oder $LASTEXITCODE in PowerShell prüfen.--connect-timeout und --max-time und verlängern Sie diese bei Bedarf. Wenn der Server dauerhaft langsam antwortet, prüfen Sie auch die Serverlast und den Netzwerkpfad (Proxy, VPN usw.).curl -f (--fail) hinzu, damit curl den Exit Code 22 zurückgibt, sobald die HTTP-Antwort 400 oder höher ist. Ohne diese Option führt das erfolgreiche Abrufen einer Fehlerseite weiterhin zu Exit Code 0.
Übrigens – Das Exit-Code-System von curl
curl ist ein Kommandozeilen-Tool, dessen Entwicklung 1996 von Daniel Stenberg begonnen wurde, ursprünglich unter dem Namen „httpget“. Heute ist curl standardmäßig auf praktisch jeder Linux-Distribution, macOS sowie Windows 10 und neuer vorinstalliert und gehört damit zu den grundlegendsten Werkzeugen für Webentwickler.
Das Exit-Code-System entspricht direkt dem internen Fehler-Enum von libcurl, CURLcode, und ist als fortlaufende Nummerierung ab `CURLE_OK` (Erfolg, Exit Code 0) definiert. Lücken in der Nummerierung entstehen dadurch, dass im Laufe der Entwicklung einige Fehlercodes als veraltet markiert oder zusammengeführt wurden.
Interessanterweise bilden die Exit Codes von curl ein eigenständiges System, das unabhängig von der allgemeinen POSIX-Konvention (0 = Erfolg, 1 = allgemeiner Fehler) ist. Das bedeutet: Wer in einem Shell-Skript die Exit Codes mehrerer Tools gemeinsam verarbeiten möchte, muss die Bedeutung in jedem einzelnen Handbuch nachschlagen.