libcurl使用示例
远程下载文件,并将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使用示例的更多相关文章
- libcurl代码示例
http://note.youdao.com/noteshare?id=e60a679d1731c870ff45e403de81a2c0
- 使用curl,libcurl访问Https
编译curl,libcurl 下载curl源码(git clone https://github.com/curl/curl),在目录curl\winbuild\BUILD.WINDOWS.txt文件 ...
- C++ 用libcurl库进行http通讯网络编程
使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...
- C++ 用libcurl库进行http通讯网络编程(转)
转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...
- linux c libcurl的简单使用(转)
curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作.看一个简单的例子: #include <curl/curl.h> #include <std ...
- libcurl
一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.libcurl使用 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- C++ 用libcurl库进行http通讯网络编程[转]
http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...
- C/C++ 用libcurl库进行http通讯网络编程
C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...
随机推荐
- mysql memcache
http://blog.csdn.net/newjueqi/article/details/8350643
- Jdt Javax
http://www.javablogging.com/dynamic-in-memory-compilation/ http://www.java2s.com/Code/Java/JDK-6/Com ...
- HDU4738【杭州网赛、判桥】
刚拿到这道题时挺有思路,无奈平日里只敲过找割顶的代码,判桥的代码当时自己也没仔细敲. 当时一把泪啊,忽然感觉自己的图论才只是刚搞了个起步啊.. 题目有神坑. 就是先判是否连通,不连通直接输出0; ...
- c# xml操作类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xm ...
- C语言的本质(4)——浮点数的本质与运算
C语言的本质(4)--浮点数的本质与运算 C语言规定了3种浮点数,float型.double型和long double型,其中float型占4个字节,double型占8个字节,longdouble型长 ...
- POJ 3111 K Best(二分答案)
[题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...
- Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答
Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答 Boost正则表达式库regex常用search和match示例 发表回复 Boo ...
- SRM 581 D2 L2:SurveillanceSystem,重叠度
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12588 在判断 ‘+’ 的时候使用了 重叠度 的概念,跟一般的 ...
- Spring、Struts2+Spring+Hibernate整合步骤
所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...
- MediaChooser图库浏览器
MediaChooser Android库 MediaChooser是一个库,浏览并选择视频和图像从SD卡.它可以用来显示文件中查看图像和视频(显示所有文件)或文件夹视图(显示文件分类).项目按日期, ...