Der direkte Check ist curl -sI https://example.com/big.iso | grep -i 'accept-ranges': Fehlt Accept-Ranges: bytes in der Antwort, kann der Server grundsätzlich nichts fortsetzen, und -C - rettet das nicht. Überspringt man diesen Check, landet man leicht bei curls hässlichstem Fehlerfall: Exit-Code 0, keine auffällige Meldung, und am Ende eine still abgeschnittene Datei. Hier geht es darum, richtig fortzusetzen, diesen Fehler zu erkennen, erneut zu versuchen und am Ende wirklich zu prüfen, ob die Datei vollständig ist.
1. Kann der Server Downloads überhaupt fortsetzen?
$ clai prüfe ob der Server das Fortsetzen von Downloads unterstützt→ curl -sI https://example.com/big.iso | grep -i 'accept-ranges'
Fehlt der Header Accept-Ranges: bytes in der Antwort, ist Fortsetzen grundsätzlich unmöglich, und daran ändert -C - nichts. Dreißig Sekunden Prüfung ersparen eine Stunde Ärger, wenn ein großer Download kurz vor Schluss abbricht.
2. Einen normalen Download fortsetzen
$ clai setze diesen unterbrochenen Download fort→ curl -C - -O https://example.com/big.iso
-C - weist curl an, den Offset selbst anhand der Größe der lokalen Datei zu bestimmen. -O speichert unter dem Namen aus der URL. Ist die Datei schon vollständig, meldet curl schlicht, dass nichts mehr zu holen ist.
3. Die Falle: der Server unterstützt kein Range
$ clai lade die Datei herunter und prüfe ob sie vollständig angekommen ist→ curl -C - -o part.bin http://example.com/big.bin && cmp -s part.bin original.bin && echo intact || echo TRUNCATED
Wegen dieser Zeile gibt es den ganzen Artikel. Ignoriert ein Server Range, endet curl trotzdem mit Code 0 — kein Fehler, keine Warnung — und die Datei bleibt genau dort abgeschnitten, wo sie abgebrochen ist. Gegen einen echten Server getestet: Es kamen 51200 Bytes statt 200000 an, ohne eine einzige Fehlermeldung. Einem fortgesetzten Download nie ohne Prüfung trauen — über Größe, cmp oder Prüfsumme.
4. Wiederholen, bis der Download durchläuft
$ clai lade diese Datei mit Wiederholungen bis sie vollständig heruntergeladen ist→ curl --retry 10 --retry-delay 5 --retry-all-errors -C - -O https://example.com/big.iso
--retry deckt Netzwerkfehler ab, --retry-all-errors erweitert das auch auf 5xx-Antworten. Zusammen mit -C - setzt jeder Versuch dort fort, wo der letzte aufgehört hat, statt neu zu beginnen.
5. Geschwindigkeit begrenzen, um die Leitung nicht zu verstopfen
$ clai lade die Datei herunter aber begrenze sie auf ein Megabyte pro Sekunde→ curl --limit-rate 1M -C - -O https://example.com/big.iso
Nützlich auf einer Maschine, auf der noch etwas anderes Bandbreite braucht. Akzeptiert die Suffixe k, M und G.
6. Prüfen, dass die richtige Datei angekommen ist
$ clai prüfe die Prüfsumme der gerade heruntergeladenen Datei→ curl -sO https://example.com/big.iso.sha256 && sha256sum -c big.iso.sha256
Der letzte Schritt jedes fortgesetzten Downloads. Eine passende Prüfsumme ist der einzige echte Beweis, dass eine aus Teilen zusammengesetzte Datei intakt ist — die Größe kann passen, obwohl der Inhalt es nicht tut.
Stolperfallen
- curl meldet nie, dass ein Fortsetzen fehlgeschlagen ist. Exit-Code 0, Datei abgeschnitten. Prüfen im Nachhinein ist die einzige echte Verteidigung.
- Ändert sich die Datei auf dem Server während des Fortsetzens, bekommt man Datenmüll. Bytes der alten und der neuen Version landen zusammengeklebt in einer Datei. Im Zweifel die Teildatei löschen und neu laden.
-C -zusammen mit einem-o, das auf eine übrig gebliebene Datei zeigt, ist gefährlich. curl setzt fort, was an diesem Pfad bereits liegt — es prüft nur den Dateinamen, nicht woher die Bytes stammen.
Verwandte Fragen
wget oder curl? wget -c hat die gleiche Fortsetzungslogik und ist für eine einzelne Datei einfacher. curl ist in Skripten flexibler und läuft auch dort, wo wget nie installiert wurde.
Wie setze ich einen Download über ssh fort? rsync --partial --progress --append-verify — es setzt fort und prüft den bereits vorhandenen Teil.
Was bedeutet "bad download resume"? curl konnte nicht am richtigen Offset fortsetzen — der Server unterstützt kein Range, oder die Datei hat sich geändert. Von vorne anfangen.
Siehe auch
- API-Latenz mit curl messen
- Prüfen, ob ein Port auf einem Remote-Server offen ist
- Ein beliebiges Archiv entpacken
Schluss mit dem Rätselraten, welche curl-Flags ein fortgesetzter Download braucht — beschreiben Sie es, CliAI schreibt den Befehl. In einer Zeile installieren.