转载: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://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完成传输任务的流程:
在控制台程序中使用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 ;
}