远程下载文件,并将http 头信息存放内存中以及文件大小等相关信息:

 #include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h> struct MemoryStruct {
char* memory;
size_t allsize;
}; static size_t WriteMemoryCallback(void* contents, size_t _size, size_t nmemb, void* userp)
{
size_t realsize = _size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct*)userp; mem->memory = (char*)realloc(mem->memory, mem->allsize + realsize + );
if(mem->memory == NULL){
printf("realloc error...\n");
return ;
} memcpy(&(mem->memory[mem->allsize]), contents, realsize);
mem->allsize += realsize;
mem->memory[mem->allsize] = ; return realsize;
} size_t write_data(char* buffer, size_t size, size_t items, void* outstream)
{
int written = fwrite(buffer, size, items, (FILE*)(outstream));
return written;
} double get_download_size(char* url){
CURL* curl;
CURLcode res;
double size = 0.0;
int httpcode=;
FILE* fd = fopen("./aaa.txt", "wb+");
char *type = (char*)malloc();
struct MemoryStruct chunk;
chunk.memory = (char*)malloc();
chunk.allsize = ; curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url);
//curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, ); //不跳转
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, );
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)fd);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void*)&chunk); res = curl_easy_perform(curl);
if(res != CURLE_OK){
fprintf(stderr, "curl_easy_getinfo() failed: %s\n", curl_easy_strerror(res));
}
res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);
if(res != CURLE_OK || httpcode != ){
fprintf(stdout, "httpcode error!\n");
}
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &size);
if(res != CURLE_OK ){
fprintf(stdout, "httpcode xxxerror!\n");
} res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &type);
if(res != CURLE_OK ){
fprintf(stdout, "TYPE xxxerror!\n");
}
printf("type:\n%s\n", type);
printf("header:\n%s\n", chunk.memory);
fclose(fd);
free(chunk.memory);
curl_easy_cleanup(curl); return size;
} int main(int argc, char* argv[])
{
char url[] = "http://www.fastcgi.com/dist/fcgi.tar.gz"; double filesize = get_download_size(url);
printf("[%0.0lf] %s\n", filesize, url);
return ;
}

libcurl使用示例的更多相关文章

  1. libcurl代码示例

    http://note.youdao.com/noteshare?id=e60a679d1731c870ff45e403de81a2c0

  2. 使用curl,libcurl访问Https

    编译curl,libcurl 下载curl源码(git clone https://github.com/curl/curl),在目录curl\winbuild\BUILD.WINDOWS.txt文件 ...

  3. C++ 用libcurl库进行http通讯网络编程

    使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...

  4. C++ 用libcurl库进行http通讯网络编程(转)

    转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...

  5. linux c libcurl的简单使用(转)

    curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作.看一个简单的例子: #include <curl/curl.h> #include <std ...

  6. libcurl

    一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.libcurl使用 ...

  7. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  8. C++ 用libcurl库进行http通讯网络编程[转]

    http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...

  9. C/C++ 用libcurl库进行http通讯网络编程

    C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...

随机推荐

  1. 安装 Archlinux 小记

    故事的背景 开始的时候装的 win8 + ubuntu 双系统,但是慢慢感觉只要有 windows 存在,在 Linux 上遇到问题了就想逃回去. 在一次 GDG 的演讲中听到的: 趁现在还年轻,还有 ...

  2. 一个Windows C++的线程池的实现

    此线程池所依赖的线程类,请参看<一个Windows C++的线程类实现>: http://blog.csdn.net/huyiyang2010/archive/2010/08/10/580 ...

  3. Android studio gradle配置!!!【转】

    转自:http://www.open-open.com/lib/view/open1415793464648.html Gradle 基本概念 首先我们学习几个gradle 的脚本语法,掌握了这几个语 ...

  4. POJ 1182 食物链(并查集拆点)

    [题目链接] http://poj.org/problem?id=1182 [题目大意] 草原上有三种物种,分别为A,B,C A吃B,B吃C,C吃A. 1 x y表示x和y是同类,2 x y表示x吃y ...

  5. [转]Net Framework引路蜂地图开发示例

    From:http://www.2cto.com/kf/201207/140421.html 引路蜂地图也提供对.Net Framework平台的支持,可以开发桌面地图应用,由于Mono C#的跨平台 ...

  6. Gradient boosting

    Gradient boosting gradient boosting 是一种boosting(组合弱学习器得到强学习器)算法中的一种,可以把学习算法(logistic regression,deci ...

  7. hdu 2768

    求最大留下的观众,观众之间存在不能同时满足的关系,就是矛盾关系, 矛盾关系建边,建边是双向的所以最大匹配要/2 还有一种建图的方法:把观众分成两个集合,一个是投留下猫的,一个是投留下狗的 每个集合间没 ...

  8. 为何与0xff进行与运算

    为何与0xff进行与运算 在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) { String ret = "" ...

  9. create a (VSTO) Office 2007 add-in using VS 2012?

    You can get VS 2012 working with Office 2007. First create an Outlook 2010 Add-In and modify the pro ...

  10. 在 IIS 中配置 ASP.NET 应用程序

     注意事项: 1.注册.NET 如果先安装.net平台,后安装IIS,那么在IIS中可能就没有出现ASP.NET版本的下拉菜单,就要手动注册: 一般.Net版本都存放在:C:\WINDOWS\Micr ...