曲径通幽论坛

标题: 测试下载速度 [打印本页]

作者: beyes    时间: 2011-6-30 11:56
标题: 测试下载速度
下面代码演示了如何使用 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.





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2