1.      从http://curl.haxx.se/download.html下载libcurl源码,解压缩;

2.      通过CMake(cmake-gui)生成vs2013 x64位 CURL.sln;

3.      打开CURL.sln,编译会生成libcurl.dll动态库;

4.      在CURL.sln基础上,添加一个testlibcurl控制台工程;

5.      testlibcurl.cpp:

#include "stdafx.h"
#include <iostream>
#include <curl/curl.h>size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{FILE* stream = (FILE*)userdata;if (!stream) {printf("!!! No stream\n");return 0;}size_t written = fwrite((FILE*)ptr, size, nmemb, stream);return written;
}bool download_jpeg(char* url)
{FILE* fp = fopen("out.jpg", "wb");if (!fp) {printf("!!! Failed to create file on the disk\n");return false;}CURL* curlCtx = curl_easy_init();curl_easy_setopt(curlCtx, CURLOPT_URL, url);curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp);curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);CURLcode rc = curl_easy_perform(curlCtx);if (rc) {printf("!!! Failed to download: %s\n", url);return false;}long res_code = 0;curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK)) {printf("!!! Response code: %d\n", res_code);return false;}curl_easy_cleanup(curlCtx);fclose(fp);return true;
}size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{size_t written = fwrite(ptr, size, nmemb, stream);return written;
}bool download_jpeg2(char* url)
{CURL *curl;FILE *fp;CURLcode res;char* outfilename = "out2.jpg";curl = curl_easy_init();if (curl) {fp = fopen(outfilename, "wb");curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);res = curl_easy_perform(curl);/* always cleanup */curl_easy_cleanup(curl);fclose(fp);}else {printf("!!!curl init failed\n");return false;}return true;
}int main(int argc, char* argv[])
{char* url = "http://f.hiphotos.baidu.com/image/pic/item/d043ad4bd11373f0671f5d95a60f4bfbfbed0493.jpg";#if 1if (!download_jpeg(url)) {printf("!! Failed to download file: %s\n", url);return -1;}
#elseif (!download_jpeg2(url)) {printf("!! Failed to download file: %s\n", url);return -1;}
#endifstd::cout << "ok!" << std::endl;return 0;
}

参考文献:

1.      http://stackoverflow.com/questions/10112959/download-an-image-from-server-curl-however-taking-suggestions-c

2.      http://stackoverflow.com/questions/1636333/download-file-using-libcurl-in-c-c

3.      https://www.hackthissite.org/articles/read/1078

4.      http://curl.askapache.com/c/example.html

GitHub:https://github.com/fengbingchun/Libcurl_Test

libcurl库的使用(通过libcurl库下载url图像)相关推荐

  1. libcurl库使用详情、libcurl库的制作

    文章目录 libcurl库的制作 1.libcurl简介: 2.下载libcurl库并制作自己的curl库 3.API说明 相关例子见官网:[example.html](https://curl.se ...

  2. Python 库pyautogui 0.9.52的下载、安装和使用

    图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面.允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命 ...

  3. 小程序源码:最新掌上题库微信小程序源码下载,修复登录接口,支持在线考试,自定义导入考题-多玩法安装简单

    这是一款题库微信小程序源码 支持积分商城.自定义试题及导入.知识点分类.模式试题考试.流量主等 首页模块:专项刷题 .题型刷题.乱序刷题.我的收藏.我的错题.未作习题.刷知识点.考前必背 另外还有更多 ...

  4. jcenter库中的依赖包无法下载

    jcenter库中的依赖包无法下载 react-native打包失败 解决办法 react-native打包失败 今天突然发现react-native项目打包失败,仔细查看发现是因为jcenter库中 ...

  5. 【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ① ( 下载 OpenCV 库 | Windows 中安装 OpenCV 库 )

    文章目录 一.下载 OpenCV 库 二.Windows 中安装 OpenCV 库 博客资源 : https://download.csdn.net/download/han1202012/87357 ...

  6. 最新掌上题库微信小程序源码下载,修复登录接口,支持在线考试,自定义导入考题

    这是一款题库微信小程序源码 支持积分商城.自定义试题及导入.知识点分类.模式试题考试等 首页模块:专项刷题.题型刷题.乱序刷题.我的收藏.我的错题.未作习题.刷知识点.考前必背 另外还有更多功能就不一 ...

  7. 万维考试系统python题库答案_万维试题库系统官方下载

    万维试题库管理系统是一款相当出色的考试软件,软件拥有很多功能如课程定义,题型支持.试题批量识别导入,雷同试题检测,随机组卷和手工组卷流程控制,透明压缩,双向缓冲处理,数据导入导出共享,相当实用. 基本 ...

  8. python下载的库要放到哪里-Python下载url并保存文件的三种方法

    本节主要内容: 学习python下载Url并保存文件的方法. Python中通常是使用Http利用urllib或urllib2模块来下载url中的内容. 当然也可以利用ftplib从ftp站点下载文件 ...

  9. python第三方库安装方法-Python第三方库安装

    Python有一个全球社区:https://pypi.org/,在这里我们可以搜索任何主题的Python第三方库.PyPI全称是Python Package Index,指的是Python包的索引,它 ...

最新文章

  1. 2021年大数据Flink(十六):流批一体API Connectors ​​​​​​​​​​​​​​Redis
  2. Android Studio vs Eclipse:你需要知道的那些事
  3. 五、朴素贝叶斯分类算法
  4. POJ - 3683 Priest John's Busiest Day(2-SAT+路径打印)
  5. [原创]FineUI秘密花园(二十一) — 表格之动态创建列
  6. filter 灰度处理:公祭日,一行代码让页面变成黑白色调
  7. python 会计凭证_实际工作中,大多数单位都使用单式记账凭证。()
  8. 玩转springboot2.x之异步调用@Async
  9. 百度又要开放哪些无人车新能力?“老司机”Apollo3.5要来了,市中心开车无压力...
  10. Ev Dekorasyonu
  11. EDA实验课课程笔记(一)——linux操作系统及linux下的基本指令
  12. stm32单片机相同系列型号代码移植
  13. 双绞线的制作方式详解
  14. ionic 微博模板
  15. 网络基础之交换机原理及4大功能
  16. 学习笔记——共阳数码管的动态显示
  17. Android加载3D模型的学习笔记
  18. 城市道路井盖安全监测系统 opencv
  19. 1. 有1,2,3,4个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少?
  20. 大三上期末复习(网络安全物联网概论安全协议软件工程)

热门文章

  1. LabVIEW彩色图像分割(基础篇—14)
  2. LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)
  3. kernfs_link_sibling
  4. Invoker 2019CCPC秦皇岛站I题 简单DP
  5. linux中cooy命令_Linux复制指令
  6. c++创建包含opencv的dll供C,C#调用
  7. 残差平方和ssr的计算公式为_如何为你的回归问题选择最合适的机器学习方法?...
  8. Learn OpenGL (十一):光照贴图
  9. Udacity机器人软件工程师课程笔记(二十三) - 控制(其一)- PID控制及其python实现
  10. linux下远程传输文件命令scp使用注解