2016-08-09 3 views
0

Ich habe einige Probleme mit libcurl. Das Problem sehe ich, wenn ich versuche, den Download einer bereits heruntergeladenen Datei fortzusetzen. Aber in einigen Fällen weiß ich nicht, ob es heruntergeladen wurde oder nicht, also versuchen wir erneut mit fortfahren, was mit HTTP 416 fehlschlägt - Server unterstützt keine Byte-Bereiche.cURL Befehlszeile oder lib - Fortsetzen des Dateidownloads - IIS

Dies ist definitiv nicht wahr, da der Server an jedem Punkt fortfahren kann, bis die Datei heruntergeladen ist.

Gibt es eine Möglichkeit, dass libcurl weiß, dass eine Datei tatsächlich bereits heruntergeladen wurde und diesen irreführenden Fehler nicht gibt?

Oder kann ich irgendwie anders chec, wenn es vollständig heruntergeladen wird?

~ # ./curl -L -O -C - http://speedtest.ftp.otenet.gr/files/test10Mb.db 
 
sk_sort:0xb6f4eae4 
 
** Resuming transfer from byte position 10485760 
 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
 
           Dload Upload Total Spent Left Speed 
 
    0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 
 
curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume. 
 

 
~ # ls -ltr test10Mb.db 
 
-rw-r--r-- 1 root  root  10485760 Aug 9 09:13 test10Mb.db

Vielen Dank!

Antwort

2

Ja, Libcurl könnte machen einen HEAD Anforderung zuerst um herauszufinden, was die Gesamtgröße ist vor es für den Bereich Anforderung fragt, so würde es sehen, dass es bereits alle heruntergeladenen Daten hat und überspringen die nächste Anfrage

Das würde natürlich eine lustige Wettlaufbedingung hinzufügen, die eine Datei, die auf dem Server-Ende wächst, leicht fälschlicherweise solche "keine Notwendigkeit, fortsetzen" -Fehler auslösen würde.

In Ihrem Fall können Sie Ihr Problem wahrscheinlich umgehen, indem Sie eine solche HEAD-Anfrage vor dem Fortsetzungsversuch manuell hinzufügen.

+0

Wäre es wahrscheinlich am besten, mit IIS zu optimieren, um die Inhaltslänge in 416 zurückzugeben, die locken wird, dass infact Download abgeschlossen ist. Sonst ist es ein bisschen nutzlos, weiter zu haben ... Oder wenn curl das nur auf 416 tun würde – Lonko

+0

Richtig, Curl könnte es vielleicht für den 416 Fall tun, aber ich bin mir nicht sicher, wie sicher Curl sein kann, dass der Grund genau das ist das ganze Ding ist bereits heruntergeladen ... Ich bin offen für Patches für jeden, der daran arbeiten will! –

Verwandte Themen