- 浏览: 163086 次
- 性别:
- 来自: 南京
最新评论
VC++调用libcurl的VC库使用详解
- 博客分类:
- C++学习备忘
1、下载官方库。
地址:http://curl.haxx.se/download.html#Win32 下载 Win32 - MSVC,下面有两个版本的库,一个是带ssl的,一个是不带ssl的。
不带ssl的:http://curl.haxx.se/download/libcurl-7.18.0-win32-msvc.zip
带ssl的:http://curl.haxx.se/download/libcurl-7.19.3-win32-ssl-msvc.zip
2、在VS2010中VC++目录中加入从zip中解压的include目录,和lib目录
3、使用方法为,注意还有debug和Release两种库 :
#include <curl/curl.h> //不带SSL #pragma comment(lib, "libcurl.lib") //带SSL #pragma comment(lib, "libcurl_imp.lib")
4、 下面是我写的用于http和https的学习记录
// libcurl http和https学习记录 2012-6-30 by Dewei // #include "stdafx.h" #include <string> #include <iostream> #include <assert.h> #include "curl/curl.h" #pragma comment(lib, "libcurl_imp.lib") #define SKIP_PEER_VERIFICATION 1 //#define SKIP_HOSTNAME_VERFICATION 1 /* ptr是指向存储数据的指针, size是每个块的大小, nmemb是指块的数目, stream是用户参数。 所以根据以上这些参数的信息可以知道,ptr中的数据的总长度是size*nmemb */ size_t call_wirte_func(const char *ptr, size_t size, size_t nmemb, std::string *stream) { assert(stream != NULL); size_t len = size * nmemb; stream->append(ptr, len); return len; } // 返回http header回调函数 size_t header_callback(const char *ptr, size_t size, size_t nmemb, std::string *stream) { assert(stream != NULL); size_t len = size * nmemb; stream->append(ptr, len); return len; } int _tmain(int argc, _TCHAR* argv[]) { CURL *curl; CURLcode code; std::string szbuffer; std::string szheader_buffer; char errorBuffer[CURL_ERROR_SIZE]; std::string url = "http://www.douban.com"; //std::string url = "https://vip.icbc.com.cn/icbc/perbank/index.jsp"; std::string useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"; /* CURL_GLOBAL_ALL //初始化所有的可能的调用。 CURL_GLOBAL_SSL //初始化支持 安全套接字层。 CURL_GLOBAL_WIN32 //初始化win32套接字库。 CURL_GLOBAL_NOTHING //没有额外的初始化。 */ curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { // 远程URL,支持 http, https, ftp curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_USERAGENT, useragent.c_str()); // 官方下载的DLL并不支持GZIP,Accept-Encoding:deflate, gzip curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip, deflate"); //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);//调试信息打开 //https 访问专用:start #ifdef SKIP_PEER_VERIFICATION //跳过服务器SSL验证,不使用CA证书 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); //如果不跳过SSL验证,则可指定一个CA证书目录 //curl_easy_setopt(curl, CURLOPT_CAPATH, "this is ca ceat"); #endif #ifdef SKIP_HOSTNAME_VERFICATION //验证服务器端发送的证书,默认是 2(高),1(中),0(禁用) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); #endif //https 访问专用:end //发送cookie值给服务器 //curl_easy_setopt(curl, CURLOPT_COOKIE, "name1=var1; name2=var2;"); /* 与服务器通信交互cookie,默认在内存中,可以是不存在磁盘中的文件或留空 */ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "./cookie.txt"); /* 与多个CURL或浏览器交互cookie,会在释放内存后写入磁盘文件 */ curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "./cookie.txt"); /* POST 数据 */ // curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl"); //设置重定向的最大次数 curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 5); //设置301、302跳转跟随location curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); //抓取内容后,回调函数 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, call_wirte_func); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &szbuffer); //抓取头信息,回调函数 curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback ); curl_easy_setopt(curl, CURLOPT_HEADERDATA, &szheader_buffer); /* CURLE_OK 任务完成一切都好 CURLE_UNSUPPORTED_PROTOCOL 不支持的协议,由URL的头部指定 CURLE_COULDNT_CONNECT 不能连接到remote 主机或者代理 CURLE_REMOTE_ACCESS_DENIED 访问被拒绝 CURLE_HTTP_RETURNED_ERROR Http返回错误 CURLE_READ_ERROR 读本地文件错误 CURLE_SSL_CACERT 访问HTTPS时需要CA证书路径 */ code = curl_easy_perform(curl); if(CURLE_OK == code) { double val; /* check for bytes downloaded */ code = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &val); if((CURLE_OK == code) && (val>0)) printf("Data downloaded: %0.0f bytes.\n", val); /* check for total download time */ code = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &val); if((CURLE_OK == code) && (val>0)) printf("Total download time: %0.3f sec.\n", val); /* check for average download speed */ code = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &val); if((CURLE_OK == code) && (val>0)) printf("Average download speed: %0.3f kbyte/sec.\n", val / 1024); printf("%s\n",szbuffer.c_str()); } else { fprintf(stderr, "Failed to get '%s' [%s]\n", url, errorBuffer); // exit(EXIT_FAILURE); } /* 释放内存 */ curl_easy_cleanup(curl); } curl_global_cleanup(); getchar(); return 0; }
提示:
若没有找到zlib1.dll文件。
到
http://gnuwin32.sourceforge.net/downlinks/zlib-bin-zip.php
下载zib包,将dll文件拷贝至debug目录,程序即可正常执行了。
发表评论
-
C风格日期时间在std c++中使用备忘
2013-10-25 17:47 1256//包含的头文件 #include <ctime&g ... -
查找HTML代码“超级链接”中含有域名的函数
2013-10-22 17:48 1942需求:在一段HTML里寻找超级链接中(正文文本)域名。 ... -
纯C实现MD5加密
2013-10-21 11:17 2208序 真是天下文章一大抄,国内的牛人们在抄国外的开源 ... -
libcurl 编译支持gzip、ssl、c-ares
2013-10-17 08:50 8539使用CURLOPT_NOSIGNAL后必须启用异步DNS,因 ... -
VC获取windows 安装内存(RAM)
2013-10-11 16:10 1430//起因:在某些机器上无法使用GlobalMemorySt ... -
Visual Studio 2010/2013 string对UTF8的支持总结
2013-09-12 00:13 11376VisualStudio 2010 SP1环境 1 ... -
stringstream 的.str()正确用法和清空操作
2013-09-11 14:53 7247streamstring在调用str()时,会返回临时的st ... -
C语言实现 strpos 查找字符串首次出现位置
2012-08-17 19:50 9554今天又写了个函数,查找字符串首次出现位置,以此作为记录: / ... -
C/C++ 字符串为空判断 效率比较
2012-08-16 19:22 21654为了测试判断字符串为空的效率,今天特意做了一个测试。得出以下结 ... -
C/C++ URL编码,解码(提取自PHP)
2012-08-13 23:59 11845偶然发现,网上已经有很多对PHP的URL编解码函数提取的文章, ... -
VC++ 编译libcurl 支持SSL,GZIP
2012-07-12 22:58 17249由于网上下载的 libcurl ... -
jsoncpp 简明学习(含类似php的print_r函数)
2012-06-30 12:59 2840C++ 处理JSON学习记录,今天整理了一下,把测试代码全文发 ... -
C/C++ 文件读写操作
2012-06-25 00:09 2200标准C++ 读写文件内容: //标准C++ 读文件 ... -
C++ 字符串操作学习
2012-06-24 17:05 4485为什么std::string 连最常用,最基本的功能也没有 ... -
char*, string, CString, String^的相互转换
2012-06-23 14:17 5807从char*转换: char ...
相关推荐
vc++使用libcurl下载文件,支持断点续传,支持多文件下载;代码经测试,可以编译运行;使用url解析文件名;谢谢支持!
libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证。 PHP自带curl扩展,但java没有curl扩展,这个工程的目的,就是将...
libcurl vc15 库 vs2017 windows 下手动编译生成的库,支持http ftp ftps 等协议。接口可供二次开发
libcurl vc6 静态库
个人编译的 libcurl静态库,并且附带使用例子!
libcurl vc14 库 vs2015 windows 下手动编译生成的库,支持http ftp ftps 等协议
libcurl静态库(适用VC6.0),可以在vc6.0中静态编译,可以带有openssl
个人整合代码 ftp下载数据调用c++libcurl库源码支持续点下载
VS2013调用libcurl库示例工程,相关技术博客:http://blog.csdn.net/yannanxiu/article/details/56841726
个人编译的 libcurl静态库,并且附带使用例子,改下IP地址就能用
支持https的libcurl静态库、头文件,已测试可以使用,库文件使用vs2010编译
c++使用libcurl上传和下载资源,封装了库,带lib文件,带nodejs测试服务端
自己编译的libcurl静态库,支持https
使用libcurl库通过http协议下载文件并实时显示下载进度
libcurl库开发手册,有利于初入libcurl库开发人员进行网络上传下载的开发环境的搭建,快速入手的基础篇
libcurl vc16 x64 release static ssp
libcurl openssl vc6静态库
curl7.65.3 带https win32 c++开发库 包含include lib bin文件夹,默认的curl是不带https的,所以编译一个带https方便大家使用
因为libcurl库bin文件很难找。所以上传bin文件和相关库。可以直接调用
使用VC6编译-Curl和LibCurl+ssl+ssh2+zlib libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,...