2016-08-09 64 views
0

我在使用libcurl時遇到了一些麻煩。我在嘗試恢復已下載文件的下載時看到的問題。但在某些情況下,我不知道它是否被下載,所以我們嘗試繼續下載,這與HTTP 416一起失敗 - 服務器不支持字節範圍。cURL命令行或lib - 恢復文件下載 - IIS

這絕對不是真的,因爲服務器可以在任何時候繼續下去,直到下載文件。

有沒有一種方式,libcurl會知道一個文件實際上已經下載,不會給這個誤導性的錯誤?

或者我可以以某種方式,否則chec,如果它完全下載?

~ # ./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

謝謝!

回答

2

是,libcurl的可以做出HEAD請求首先要弄清楚的總大小是什麼它要求範圍請求,所以會看到,它已經下載的所有數據,並跳過下一個請求。

這當然會增加一個有趣的競爭條件,使服務器端的文件增長很容易錯誤地觸發這樣的「不需要恢復」錯誤。

對於您的情況,您可以在恢復嘗試之前手動添加這樣的HEAD請求,以解決您的問題。

+0

這可能是最好的與IIS調整返回的內容長度在416​​將通知捲曲,事實上下載完成。否則,繼續下去是沒有用的......或者如果curl會在416上這樣做 – Lonko

+0

對,捲曲也許可以用於416的情況,但我不確定捲曲的確切程度如何,整個事情已經下載了......我願意爲所有願意工作的人打開補丁程序! –