http://blog.csdn.net/shenlanzifa/article/details/22731483

curl_easy_getinfo() 函数原型声明如下:

#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );

使用该函数可以在请求求 curl 会话中的相关信息。注意,第 3 个参数必须是一个 long 型,或char型,或curl_slist型,抑或是double型的指针。函数所请求信息只有在函数返回  CURLE_OK  时才会被有效填充,该函数一般用在 perform 函数(如 curl_easy_perform() )之后。

第 2 个参数有众多选项,每个选项都有其相应的含义:

CURLINFO_SIZE_DOWNLOAD
使用该选项时要求第 3 个参数是个 double 型的指针,这样在一次传输成功后会将本次传输所下载的字节数赋值到指针所指向的 double 型变量中。注意,这个字节数只能反映最近一次的下载。

CURLINFO_SPEED_DOWNLOAD
该选项要求传递一个 double 型参数指针,用以接收下载的平均速度,这个速度不是即时速度,而是下载完成后的速度,单位是  字节/秒  。

CURLINFO_TOTAL_TIME
该选项要求传递一个 double 指针到函数中,double 型变量指示了传输的总耗时(单位为秒),这个总的时间里包括了域名解析,以及 TCP 连接过程中所需要的时间。

CURLINFO_CONTENT_TYPE
该选项获得 HTTP 中从服务器端收到的头部中的Content-Type  信息。
测试代码 :

#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
intmain(void)
{
    CURL *curl;
    CURLcode res;
    FILE*fp;
    if(!(fp = fopen("info.html","w+"))) {
        perror("fopen error:");
        exit(EXIT_FAILURE);
    }    
    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com/");
        res = curl_easy_perform(curl);
        if(CURLE_OK == res) {
            char*contype;
            res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &contype);
            if((CURLE_OK == res) && ct)
                fwrite(contype, 1, strlen(contype), fp);
                fwrite("\n\0", 1, 1, fp);  //为了在 vi 里看起来完全正常,需要添加换行符和 NULL
        }
        close (fp);
        curl_easy_cleanup(curl);
    }
    return0;
}

运行输出:

$ cat info.html 
text/html;charset=gb2312

CURLINFO_FILETIME
使用该选项时需要传递一个 long 型指针到函数,该 long 型变量中保存了远程主机上的文件的最近修改日期。如果使用该值时函数返回 -1,原因是多样的(比如一些未知的,比如服务器对此日期信息做了隐藏,或者是服务器不支持获取文档时间的命令等等)。 需要注意的是 ,在使用该选项时,需要先在 curl_easy_setopt() 函数中使用 CURLOPT_FILETIME  选项,然后再运行 curl_easy_perform() 后,方能获得服务器上的文档时间。

CURLINFO_CONTENT_LENGTH_DOWNLOAD
使用该选项时要求传递一个 double 型指针到函数中,该 double 型变量用来存放所要下载文件(或者是所要查询的文件)的 content-length (文档长度) 的信息。如果文件大小无法获取,那么函数返回值为 -1 。

CURLINFO_FILETIME 和 CURLINFO_CONTENT_LENGTH_DOWNLOAD 选项使用示例,下面代码获取 FTP 服务器上的一个文件的时间和大小信息:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <curl/easy.h>
staticsize_tsave_header(void*ptr,size_tsize,size_tnmemb,void*data)
{
        return(size_t)(size * nmemb);
}
intmain(void)
{
        charftpurl[] = "ftp://vh492363:2tg96d33@121.15.245.7/www/bbs/favicon.ico";
        CURL *curl;
        CURLcode res;
        consttime_tfiletime;
        constdoublefilesize;
        constchar*filename = strrchr(ftpurl,'/') + 1;
        curl_global_init(CURL_GLOBAL_ALL);
        curl = curl_easy_init();
        if(curl) {
                curl_easy_setopt(curl, CURLOPT_URL, ftpurl);
                curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
                curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
                curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, save_header);
                curl_easy_setopt(curl, CURLOPT_HEADER, 0L);
                //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
                curl_easy_perform(curl);
                if(res != CURLE_OK) {
                        res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
                        if((CURLE_OK == res) && filetime)
                                printf("filetime %s: %s", filename, ctime(&filetime));
                        res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize);
                       if((CURLE_OK == res) && (filesize > 0))
                                printf("filesize %s: %0.0f bytes\n", filename, filesize);
                }else{
                        fprintf(stderr,"curl told us %d\n", res);
                }
        curl_easy_cleanup(curl);
        }
        curl_global_cleanup();
        return0;
}

运行输出:

beyes@debian:~/C/curl$ ./getftpinfo 
Last-Modified: Mon, 25 Apr 2011 15:26:56 GMT
Content-Length: 1758
Accept-ranges: bytes
filetime favicon.ico: Mon Apr 25 11:26:56 2011
filesize favicon.ico: 1758 bytes

原文:http://www.groad.net/bbs/thread-3933-1-1.html

curl_easy_getinfo() -- 从 curl 句柄里获得附加信息相关推荐

  1. dedecms部分文章出现读取附加信息出错的解决办法

    问题: 估计是新版本开发的时候,没有考虑旧版,文章内容为空的新闻,新版不在允许文章内容为空的新闻,这样旧版的内容为空的新闻升级后将无法再编辑.  解决: 你可以对如下文件进行如下修改: article ...

  2. 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )

    文章目录 一.字节码文件 与 JVM 二.字节码文件示例 三.字节码文件二进制结构分析 1.魔数 2.次版本号 3.主版本号 4.常量池个数 一.字节码文件 与 JVM Java 源码编译成 Clas ...

  3. php读取部分文章显示不出来了,织梦使用PHP5.3环境时遇到部分文章出现”读取附加信息出错“的解决办法jz1...

    昨天无忧主机小编一同事为客户做迁移,没注意到客户所在空间服务器环境是php5.3的,搬家成功后恢复数据,用IP地址访问网站时一切正常!这是能访问正常,是因为DEDECMS程序自身生成的html页面导致 ...

  4. 使用nodejs实现OData的batch操作在Marketing Cloud里读取contact信息

    我们先来看看Marketing Cloud系统里的contact信息: 一共1218374条数据. 我们用如下的nodejs代码通过OData来获取这些数据: var request = requir ...

  5. php callback 多线程,PHP cURL并发里的callback那行是什么效能

    PHP cURL并发里的callback那行是什么功能? function rolling_curl($urls, $delay) { $queue = curl_multi_init(); $map ...

  6. android 魅族短信拦截,如何防护手机里的个人信息?魅族18系列教你如何防范隐私泄露...

    智能手机为我们带来了无数的便利,如何保护智能手机的安全也已经成为了一个"课题".有人认为,将智能手机设置复杂的密码以及防盗就算安全了.殊不知,这样的安全仅仅只是"财务安全 ...

  7. [导入]不需要任何附加信息的伪凹凸光照计算方法。

    不需要任何附加信息的伪凹凸光照计算方法. 文章来源:http://blog.csdn.net/tarkey/archive/2005/06/23/401011.aspx 转载于:https://www ...

  8. 企业微信接收消息服务器配置php,微信企业号配置及在公众号里获取用户信息

    微信企业号配置及在公众号里获取用户信息 1.1.企业公众号里新建应用,回掉模式里自定义回调URL及密钥拿到,创建应答数据 配置成功后显示: 已成功配置企业服务器 URL http://75271.co ...

  9. 初次爬虫:读取PDF转成图片,再提取图片里的文字信息

    读取PDF转成图片,再提取图片里的文字信息 三步走 第一步 读取PDF并转换成图片 第二步 调用百度API来识别图片里面的文字信息 第三步 提取自己想要的文字信息 三步走 1 读取PDF,将PDF转换 ...

  10. linux脚本输出到文件,在linux下,如何将shell里输出的信息写入到文件里呢?

    在linux下,如何将shell里输出的信息写入到文件里呢? 在linux下,如何将shell里输出的信息写入到文件里呢? 通过下面的两个管道符可以实现些功能. >               ...

最新文章

  1. UNIX网络编程——UDP回射服务器程序(初级版本)以及漏洞分析
  2. 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载
  3. 暑假集训中期测试 Problem D: 装箱问题2 (并查集)
  4. es 怎么嵌入 算法模型_快速ES-RNN: ES-RNN算法的GPU实现
  5. bp神经网络预测模型_【2020顶会KDD】AutoST:面向时空预测的高效神经网络学习模型...
  6. Spring MVC的转发与重定向
  7. 我的小程序入门笔记(一)目录结构
  8. Scala官网下载不下来问题-已解决
  9. transient、volatile关键字
  10. 华为eNSP-动态路由实验
  11. Pandas学习-练习题
  12. 华硕支持2003服务器主板,驱动天空 - 品牌主板 - 服务器主板 SERVER - 华硕服务器主板...
  13. 实现CS客户端服务器模型(Linux系统)
  14. spyder 护眼背景--纯黑色
  15. 第一章 C语言与内存
  16. python把所有txt文件整合在一起(步道乐跑题库)
  17. 打卡赠书的几点重要说明
  18. 本博客早已废除。请移步新地址
  19. JS Uncaught TypeError: Cannot read property ‘indexOf‘ of null问题解决
  20. 兄弟连PHP学习套装,2010年限期促销!

热门文章

  1. 腾讯元老、上市公司CTO辞职后,每天对着200亩地发呆
  2. 从零开始搭建一个自己的脚手架
  3. node.js的安装和Vue.js脚手架的安装
  4. MySQL 索引原理 图文讲解
  5. knowledge transfer
  6. CC1310在433MHz下的PCB设计指南
  7. 剖析虚幻渲染体系(15)- XR专题
  8. 华为路由器IPv6 over IPv4 GRE隧道配置详解
  9. 英文科技论文各部分的时态和语态
  10. Win10蓝牙开关不显示,任务栏不显示蓝牙图标解决方案