我在使用libcurl时遇到了一些麻烦。当我尝试恢复已经下载的文件的下载时,我看到的问题。但在某些情况下,我不知道它是否已下载,因此我们尝试使用continue重新下载,这与HTTP 416失败 - 服务器不支持字节范围。
这绝对不是真的,因为服务器可以在任何时候继续,直到文件被下载。
有没有一种方法可以让libcurl知道文件已经下载并且没有给出这种误导性的错误?
或者我可以以某种方式解决,如果它是完全下载?
~ # ./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

谢谢!
答案 0 :(得分:2)
是的,libcurl 它会看到它已经下载了所有数据并跳过下一个请求。
这当然会增加一个有趣的竞争条件,使得在服务器端增长的文件很容易错误地触发这种“无需恢复”的错误。
在您的情况下,您可以通过在恢复尝试之前手动添加此类HEAD请求来解决您的问题。