我目前正在尝试用卷曲从esa的Copernicus / Sentinel项目下载卫星图像。不幸的是,下载保持在90%左右,php脚本返回内部服务器错误(500)。
因此,我想以特定的字节数恢复下载。似乎esa服务器只是忽略了http-range-header(CURLOPT_RANGE)而CURLOPT_RESUME_FROM也没有改变任何东西。
如果我使用谷歌浏览器手动下载文件,下载也会中断,但会在一段时间后继续下载。
因此,如果谷歌浏览器可以恢复下载,那么卷曲也应该可以。对于如何做到这一点,我将不胜感激。
一些细节:
我尝试下载的文件是here(420MB),要访问它,您需要在scihub.esa.int/dhus/注册。
内容类型为application/octet-stream
我的代码:
$save_file = fopen($save_filepath, "w+");
$open_file = curl_init(str_replace(" ","%20", $url));
curl_setopt($open_file, CURLOPT_USERPWD, $username.":".$password);
curl_setopt($open_file, CURLOPT_TIMEOUT, 300);
curl_setopt($open_file, CURLOPT_FILE, $save_file);
curl_setopt($open_file, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($open_file, CURLOPT_PROGRESSFUNCTION, "trackprogress");
curl_setopt($open_file, CURLOPT_NOPROGRESS, false);
curl_exec($open_file);
curl_close($open_file);
fclose($save_file);
它适用于较小的文件(我已经使用一些图像和pdf文件对其进行了测试),我还可以下载大部分卫星图像(下载的第一个380MB)。我也尝试增加超时值,但脚本会在达到5分钟之前很久终止。
我尝试了curl_setopt($open_file, CURLOPT_RESUME_FROM, 1048576);
和curl_setopt($open_file, CURLOPT_RANGE, "1048576-");
,但文件始终以相同的字节开头。
修改:
我无法回答我的问题,但针对这个具体案例,我找到了解决方法。所以,如果有人读到这个并且也想用cURL偶然下载这些卫星图像,这就是我的所作所为:
当不仅下载图像文件,而是下载带有一些附加数据的zip文件时,下载仍然会停止,但是使用curl_setopt($open_file, CURLOPT_RESUME_FROM, $bytes_already_loaded);
可以跳过先前加载的字节并恢复下载(这不是#39; t可能是图像文件)。因此,请使用此link代替图像文件。