下面代码演示了如何使用 curl 获取下载文件大小,以及下载总耗时,并在最后计算出平均的下载速度:
[C++] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <curl/curl.h>
#include <curl/easy.h>
//下载文件地址
#define DURL "http://www.yuquan.com/music/yuquan/03reai/08-woyuanyi.mp3"
#define CHKSPEED_VERSION "1.0"
static size_t WriteCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
(void)ptr;
(void)data;
return (size_t)(size * nmemb);
}
int main(void)
{
CURL *curl_handle;
CURLcode res;
time_t t = time(NULL);
printf ("Localtime: %s", ctime(&t)); //显示当前时间
curl_global_init(CURL_GLOBAL_ALL); //对 libcurl 初始化
curl_handle = curl_easy_init(); //初始化 curl 会话
curl_easy_setopt(curl_handle, CURLOPT_URL, DURL); //指定要操作的 URL
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteCallback); //设置回调函数
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-speedchecker/" CHKSPEED_VERSION); //设置 User-Agent 信息,欺骗某些服务器
res = curl_easy_perform(curl_handle); //执行会话
if (res == CURLE_OK) {
double val;
res = curl_easy_getinfo(curl_handle, CURLINFO_SIZE_DOWNLOAD, &val); //获得下载文件的大小
if ((CURLE_OK == res) && (val > 0))
printf ("Total Download time: %0.0f bytes.\n", val);
res = curl_easy_getinfo(curl_handle, CURLINFO_TOTAL_TIME, &val); //获得下载文件总耗时
printf ("Data downloaded: %0.3f sec.\n", val);
res = curl_easy_getinfo(curl_handle, CURLINFO_SPEED_DOWNLOAD, &val); //获得下载的平均速度
if((CURLE_OK == res) && (val > 0))
printf ("Average download speed: %0.3f kbyte/sec.\n", val / 1024);
}else {
fprintf (stderr, "Error while fetching '%s' : %s\n", DURL, curl_easy_strerror(res));
}
curl_easy_cleanup(curl_handle);
curl_global_cleanup();
return 0;
}
运行输出:$ ./speed
Localtime: Wed Jun 29 23:47:53 2011
Total Download time: 4446336 bytes.
Data downloaded: 20.071 sec.
Average download speed: 216.336 kbyte/sec. |