问题描述
用curl下载文件过程中出现错误码:56,文件无法继续下载。
查阅资料发现,CURLE_RECV_ERROR(56)接收网络数据失败。
遇到这种问题,可以在下载失败后进行断点续传操作。
方法一
CURLcode res;
long downloadedSize = 0;
CURL *Curl = curl_easy_init(); // 初始化并返回描述符
FILE *fp = fopen(file_path, "wb"); // 打开文件
if (fp == NULL) {
return -1;
}
...
res = curl_easy_perform(Curl);
if (res != CURLE_OK) {
//获取下载中断的偏移量
fseek(fp, 0, SEEK_END);
downloadedSize = ftell(fp);
printf("downloadedSize : %ld \n", downloadedSize);
// 设置文件续传位置
curl_easy_setopt(Curl, CURLOPT_RESUME_FROM_LARGE, downloadedSize);
}
方法二
CURLcode res;
char range[64] = {0};
long downloadedSize = 0;
CURL *Curl = curl_easy_init(); // 初始化并返回描述符
FILE *fp = fopen(file_path, "wb"); // 打开文件
if (fp == NULL) {
return -1;
}
...
res = curl_easy_perform(Curl);
if (res != CURLE_OK) {
//获取下载中断的偏移量
fseek(fp, 0, SEEK_END);
downloadedSize = ftell(fp);
printf("downloadedSize : %ld \n", downloadedSize);
// 设置文件续传位置
sprintf(range, "%ld-", downloadedSize);
curl_easy_setopt(Curl, CURLOPT_RANGE, range);
}
如果在进行一次断点续传后,还没有下载完成,可以进行多次断点续传操作。