C libcurl -测量下载速度和剩余时间

qhhrdooz  于 2023-02-03  发布在  其他
关注(0)|答案(2)|浏览(167)

我正在使用以下代码从Internet下载文件:

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t written;
    written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(int argc, char** argv)
{
 FILE *downloaded_file;
 if ( (downloaded_file = fopen (download_path , "w" ) ) != NULL )
 {
  CURL *curl;
  CURLcode res;
  curl = curl_easy_init();
  if(curl)
  {
   curl_easy_setopt(curl, CURLOPT_URL, "www.asd.com/files/file_to_download.rar");
   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
   curl_easy_setopt(curl, CURLOPT_WRITEDATA, downloaded_file);
   res = curl_easy_perform(curl);
   curl_easy_cleanup(curl);

   if (res == CURLE_OK)
   {
    printf("Download complete!\n");
   }
  }
  fclose(downloaded_file);
 }
}

如何测量当前下载速度(例如每秒)和完成下载所需的剩余时间?

7d7tgy0s

7d7tgy0s1#

你可以使用CURLOPT_PROGRESSFUNCTION。curl会传递5个参数给你的回调函数,clientpdltotaldlnowultotal,和ulnowclientp是你提供给CURLOPT_PROGRESSDATA的一个指针。total参数是需要下载的总量;现在的是到目前为止的数量。未知值为0。
要使用此选项,必须将CURLOPT_NOPROGRESS设置为0。

jgwigjjp

jgwigjjp2#

CURLOPT_PROGRESSFUNCTION自v7.32.0起已弃用,您可以改用CURLOPT_XFERINFOFUNCTION,其用法和回调结构(所有参数dltotaldlnow ...等)与CURLOPT_PROGRESSFUNCTION几乎相同

相关问题