转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程)

转载:https://my.oschina.net/u/1420791/blog/198247

转载:http://www.cnblogs.com/flylong0204/p/4723155.html

转载:http://www.tuicool.com/articles/VNRzEbq

转载:http://blog.csdn.net/hei_ya/article/details/51606799

转载:http://blog.csdn.net/zengraoli/article/details/9189449

转载:http://blog.csdn.net/sunnyleevip/article/details/41038559

转载:http://blog.csdn.net/atceedsun/article/details/40581247

转载:http://ysir.me/2015/08/26/Windows%E4%B8%8B%E7%BC%96%E8%AF%91%E5%B9%B6%E4%BD%BF%E7%94%A8libcurl-lib%E9%9D%99%E6%80%81%E5%BA%93/

转载:http://blog.csdn.net/mtour/article/details/40375947 (下载文件显示进度条demo)

转载:https://blog.csdn.net/kenkao/article/details/46875571(curl返回常见错误码)

一 准备

1.1 CURL官网下载地址:http://curl.haxx.se/download.html

1.2 找到源码包,我这里下载的是7.32.0版:http://curl.haxx.se/download/curl-7.32.0.zip

二 步骤

2.1

打开curl-7.32.0\vs\vc8\lib\vc8libcurl.vcproj文件,VS会提示升级工程,下一步即可

VC工程里有些设置问题导致不能直接编译,需要稍作修改

2.2

打开工程属性 > C\C++ > 常规 > 附加包含目录。这里的包含目录是"..\include",而这个目录根本就不存在,它应该指

向"curl-7.32.0\include"才对,所以把这里改成"..\..\..\include"。(或者直接完整路径也可以)

2.3打开工程属性 > C\C++ > 预处理器 > 预处理器定义。这里有个默认宏"BUILDING_LIBCURL",把它改

成"CURL_STATICLIB"。这样,那些接口函数就不会被声明为导出函数了。

2.4打开工程属性 > C\C++ > 库管理器 > 常规 > 附加依赖项。添加ws2_32.lib和wldap32.lib,这是CURL必须依赖的。

2.5.把"libcurl.rc"从工程中移除,它只是版本信息,只会增大文件,去掉!(无所谓)

2.6 可编译出如下版本,根据需要手动设置编译

libcurld.lib //debug      Multi-threaded Debug (/MTd)

因为默认生成的文件名为libcurl.dll ,所以为了让Debug和release有区别,我们在Librarian选中General,在output file 输入"$(OutDir)$(TargetName)d$(TargetExt)" ,中间多了一个字母d
 
libcurl.dll  //release     Multi-threaded (/MT)

//以上为静态库版本,生成exe体积大,包含库。

生成两种版本的均可。但是连接使用的时候注意对应版本。

libcurld.lib //debug     Multi-threaded DLL Debug (/MDD)
 
libcurl.dll //release    Multi-threaded DLL (MD)

//以上为动态库版本,生成exe体积小,不包含库。

2.7 然后将其分别放入自己创建一个debug和一个release文件夹内、

例如debug/libcurl.lib release//libcurl.lib
        debug/libcurl.dll release//libcurl.dll
 注意将其放入C:\curl-7.32.0\curl-7.32.0\lib\目录里面
(可以自定义,只要注意后面库包含时的变量就可以了)

2.8 创建两个环境变量

例如 CURL_INC设置为C:\curl-7.32.0\curl-7.32.0\include
例如 CURL_LIB设置为C:\curl-7.32.0\curl-7.32.0\lib

三 结果测试

3.1 然后开始测试如何使用。
   
为了测试lib文件,新建一个控制台程序,

打开工程属性 > C\C++ > 常规 >包含头文件$(CURL_INC)
打开工程属性 > C\C++ > 常规 >包含库文件$(CURL_LIB)\debug
(此处注意debug和release不同,以免影响后期工程调试)
3.2

打开工程属性 > C\C++ > 预处理器 > 预处理器定义。添加"CURL_STATICLIB"。

这样,那些接口函数就不会被声明为导出函数了

3.3 添加依赖库文件

LibCurl编程介绍

利用libcurl完成传输任务的流程:

1.调用curl_global_init()初始化libcurl
2.调用 curl_easy_init()函数得到 easy interface型指针
3.调用curl_easy_setopt设置传输选项
4.根据curl_easy_setopt设置的传输选项,实现回调函数以完成用户特定任务
5.调用curl_easy_perform()函数完成传输任务
6.调用curl_easy_cleanup()释放内存

在控制台程序中使用libcurl库,http请求下载文件显示进度

#include <stdio.h>

#include "StdAfx.h"

size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
return fwrite(ptr, size, nmemb, stream);
} int my_progress_func(char *progress_data,
double t, /* dltotal */
double d, /* dlnow */
double ultotal,
double ulnow)
{
printf("%s %g / %g (%g %%)\n", progress_data, d, t, d*100.0/t);
return ;
} int main(int argc, char **argv)
{
CURL *curl;
CURLcode res;
FILE *outfile;
char *url = "http://192.168.1.80:603/bic/download?userId=402832a95ad64661015ad6476b800024&fileName=dbpro.war";
char *progress_data = "* "; curl = curl_easy_init();
if(curl)
{
outfile = fopen("dbpro.war", "wb"); curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, progress_data); res = curl_easy_perform(curl); fclose(outfile);
/* always cleanup */
curl_easy_cleanup(curl);
}
return ;
}

libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)的更多相关文章

  1. linux下IPTABLES配置详解 (防火墙命令)

    linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...

  2. Vmware在NAT模式下网络配置详解

    Vmware在NAT模式下网络配置详解 Linux中的网络配置对于接触Linux不久的小白菜来说,还是小有难度的,可能是不熟悉这种与windows系列迥然不同的命令行操作,也可能是由于对Linux的结 ...

  3. JrtpLib vs2012环境下编译及使用 GotoFirstSourceWithData 方法 进不去

    项目中有一项功能是接收rtp数据,接收rtp的可以用PJMedia,可以用JrtpLib.PJMedia库无法解决内外网的问题,只有用Jrtp库了. 首先说下Jrtp 的编译问题,我是在windows ...

  4. Memcached在Linux环境下的使用详解

    一.引言             写有关NoSQL数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完了,从安装到数据类型,在到集群,几乎都写到了.如果以后有了心得,再补充吧.然后就 ...

  5. JDK的安装与Java环境变量的配置详解

    JDK作为JAVA开发的环境,必须在电脑上安装JDK. 1.下载jdk http://rj.baidu.com/soft/detail/14459.html?ald下载jdk最新版jdk-8u11-w ...

  6. Windows+VS2012环境下编译调试MySQL源码 转

    http://m.blog.csdn.net/blog/SnowyWolf/18952643

  7. Memcached在Linux环境下的使用详解http://blog.51cto.com/soysauce93/1737161

    大纲 一.什么是memcached 二.memcached特性 三.memcached存储方式 四.memcached安装与配置 五.memcached结合php 六.Nginx整合memcached ...

  8. Flume环境部署和配置详解及案例大全

    flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本.HDF ...

  9. tony_iptables_01_linux下IPTABLES配置详解(转)

    如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables - ...

随机推荐

  1. MUI 二维码扫描并跳转

    1 首页 index.html <li id="html/barcode.html" onclick="clicked(this.id)"> < ...

  2. C++面向对象类的实例题目十二

    题目描述: 写一个程序计算正方体.球体和圆柱体的表面积和体积 程序代码: #include<iostream> #define PAI 3.1415 using namespace std ...

  3. 腾讯云CMQ消息队列测试

    版权声明:本文由王冲原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/128 来源:腾云阁 https://www.qclou ...

  4. 浅析HTTPS与SSL原理

    版权声明:本文由盛旷 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/134 来源:腾云阁 https://www.qclo ...

  5. 高中生的IT之路-1.3那一幕

    上一篇讲到,当时我认为自己的命运就是小时候上学,长大后外出打工,所以高中毕业后就来到了天津,到爸爸的店铺打工. 我爸的店铺就在天津大学校园里,幸运的是,我人生的转折点也就在此. 刚到店里那段时间,每天 ...

  6. Minix2.0操作系统公用头文件说明

    以下头文件均在目录include/下: ansi.h: 用来检测编译器是否遵循标准C,如果是的话,_ANSI就被定义为31415,如果不是的,则_ANSI未定义.通过这个宏来诊测. limits.h: ...

  7. 微信小游戏 小程序与小游戏获取用户信息接口调整 wx.createUserInfoButton

    参考: 小程序•小故事(6)——微信登录能力优化 小程序•小故事(4)——获取用户信息 本篇主要是讲微信getUserInfo接口不再出现授权弹框 那么原来getUserInfo是怎么样?修改之后又是 ...

  8. 【BZOJ4099】Trapped in the Haybales Gold STL

    [BZOJ4099]Trapped in the Haybales Gold Description Farmer John has received a shipment of N large ha ...

  9. Inflater与findViewById()区别

    /** * Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater的作用类似于 * findViewById(),不同点是LayoutInflater是用 ...

  10. Dij二级最短路

    hdu1245 Saving James Bond Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...