博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libcurl使用示例
阅读量:7296 次
发布时间:2019-06-30

本文共 2889 字,大约阅读时间需要 9 分钟。

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

1 #include 
2 #include
3 #include
4 #include
5 6 struct MemoryStruct { 7 char* memory; 8 size_t allsize; 9 };10 11 static size_t WriteMemoryCallback(void* contents, size_t _size, size_t nmemb, void* userp)12 {13 size_t realsize = _size * nmemb;14 struct MemoryStruct *mem = (struct MemoryStruct*)userp;15 16 mem->memory = (char*)realloc(mem->memory, mem->allsize + realsize + 1);17 if(mem->memory == NULL){18 printf("realloc error...\n");19 return 0;20 }21 22 memcpy(&(mem->memory[mem->allsize]), contents, realsize);23 mem->allsize += realsize;24 mem->memory[mem->allsize] = 0;25 26 return realsize;27 }28 29 30 size_t write_data(char* buffer, size_t size, size_t items, void* outstream)31 {32 int written = fwrite(buffer, size, items, (FILE*)(outstream));33 return written;34 }35 36 double get_download_size(char* url){37 CURL* curl;38 CURLcode res;39 double size = 0.0;40 int httpcode=0;41 FILE* fd = fopen("./aaa.txt", "wb+");42 char *type = (char*)malloc(32);43 struct MemoryStruct chunk;44 chunk.memory = (char*)malloc(1);45 chunk.allsize = 0;46 47 48 49 curl = curl_easy_init();50 curl_easy_setopt(curl, CURLOPT_URL, url);51 //curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);52 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 0); //不跳转53 curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 3000);54 curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)fd);55 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);56 57 curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, WriteMemoryCallback);58 curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void*)&chunk);59 60 res = curl_easy_perform(curl);61 if(res != CURLE_OK){62 fprintf(stderr, "curl_easy_getinfo() failed: %s\n", curl_easy_strerror(res));63 }64 res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);65 if(res != CURLE_OK || httpcode != 200 ){66 fprintf(stdout, "httpcode error!\n"); 67 }68 res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &size);69 if(res != CURLE_OK ){70 fprintf(stdout, "httpcode xxxerror!\n"); 71 }72 73 res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &type);74 if(res != CURLE_OK ){75 fprintf(stdout, "TYPE xxxerror!\n"); 76 }77 printf("type:\n%s\n", type);78 printf("header:\n%s\n", chunk.memory);79 fclose(fd);80 free(chunk.memory); 81 curl_easy_cleanup(curl);82 83 return size;84 }85 86 int main(int argc, char* argv[])87 {88 char url[] = "http://www.fastcgi.com/dist/fcgi.tar.gz";89 90 double filesize = get_download_size(url);91 printf("[%0.0lf] %s\n", filesize, url);92 return 0;93 }

 

转载地址:http://aownm.baihongyu.com/

你可能感兴趣的文章
Css选择器定位详解
查看>>
selenium入门基础知识
查看>>
并查集的一般操作 ④
查看>>
Altium Designer 19使用
查看>>
Java中的字符串
查看>>
LeetCode-Remove Nth Node From End of List
查看>>
Exp2 后门原理与实践_20151208丛俐宇
查看>>
方向向量和法向量
查看>>
nodejs + ionic2 + cordova环境搭建
查看>>
BlockingQueue 堵塞队列
查看>>
vim: vimrc配置文件
查看>>
美化git客户端(命令行)
查看>>
设计模式:概念
查看>>
P4357 [CQOI2016]K远点对(KDTree)
查看>>
sql server 2008 r2 安装文件+图解安装过程+注意事项
查看>>
013_REST Service
查看>>
Android应用程序启动过程(一)总结
查看>>
运筹学整理笔记1
查看>>
jQuery全屏滚动插件fullPage.js
查看>>
IO_字节流_拷贝
查看>>