转载: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. K-mean和k-mean++

    (1)k-mean聚类 k-mean聚类比较容易理解就是一个计算距离,找中心点,计算距离,找中心点反复迭代的过程, 给定样本集D={x1,x2,...,xm},k均值算法针对聚类所得簇划分C={C1, ...

  2. Java初学者笔记一:元类、获取类型、枚举

    零.绪论: 2018年新年伊始,学习Java的冲动越来越强烈,毕竟以后无论是做安全开发还是安全研究都必不可少的掌握这门语言,所以在不断完善Python作为脚本语言的主语言的情况下觉得学习Java作为高 ...

  3. select标签的onchange事件

    /** @1.onchange事件 ==> select选择事件* @2.obj.options ==> 选择option集合* @3.obj.selectedIndex ==> 选 ...

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

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

  5. 310实验室(七)OptimizationTemplateLibrary

    利用泛型编程思想,C++模板. 首先定义变量或者重新typedef variables: 模板中的变量:_TRandom.double  _TReal._TProblem::TDecision _TD ...

  6. 310实验室OTL问题

    1.首先是下载OTL文件包,网址是:github.com/O-T-L,可以直接点击网页上的下载链接,也可以使用unlix命令,git clone https://github.com/O-T-L/OT ...

  7. SQL中distinct的用法(转载)

    1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 ...

  8. PHP新版本变化

    世界变化真快,突然听闻 PHP 都到 7.3 版本了,7.2 还没仔细了解过呢.看到我司面试时会问到php新版本有什么特性,美名其曰考察其学习新技术的能力,我有点汗颜,自己都没有主动去了解过,实在不应 ...

  9. Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出

    Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出 package com.test; import org.apach ...

  10. MySQL插入性能优化(转)

    原文:http://tech.uc.cn/?p=634 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时 ...