曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5491|回复: 0
打印 上一主题 下一主题

[Curl] 测试下载速度

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-6-30 11:56:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面代码演示了如何使用 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.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 00:08 , Processed in 0.079085 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表