libcurl库的使用(通过libcurl库下载url图像)
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图像)相关推荐
- libcurl库使用详情、libcurl库的制作
文章目录 libcurl库的制作 1.libcurl简介: 2.下载libcurl库并制作自己的curl库 3.API说明 相关例子见官网:[example.html](https://curl.se ...
- Python 库pyautogui 0.9.52的下载、安装和使用
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面.允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命 ...
- 小程序源码:最新掌上题库微信小程序源码下载,修复登录接口,支持在线考试,自定义导入考题-多玩法安装简单
这是一款题库微信小程序源码 支持积分商城.自定义试题及导入.知识点分类.模式试题考试.流量主等 首页模块:专项刷题 .题型刷题.乱序刷题.我的收藏.我的错题.未作习题.刷知识点.考前必背 另外还有更多 ...
- jcenter库中的依赖包无法下载
jcenter库中的依赖包无法下载 react-native打包失败 解决办法 react-native打包失败 今天突然发现react-native项目打包失败,仔细查看发现是因为jcenter库中 ...
- 【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ① ( 下载 OpenCV 库 | Windows 中安装 OpenCV 库 )
文章目录 一.下载 OpenCV 库 二.Windows 中安装 OpenCV 库 博客资源 : https://download.csdn.net/download/han1202012/87357 ...
- 最新掌上题库微信小程序源码下载,修复登录接口,支持在线考试,自定义导入考题
这是一款题库微信小程序源码 支持积分商城.自定义试题及导入.知识点分类.模式试题考试等 首页模块:专项刷题.题型刷题.乱序刷题.我的收藏.我的错题.未作习题.刷知识点.考前必背 另外还有更多功能就不一 ...
- 万维考试系统python题库答案_万维试题库系统官方下载
万维试题库管理系统是一款相当出色的考试软件,软件拥有很多功能如课程定义,题型支持.试题批量识别导入,雷同试题检测,随机组卷和手工组卷流程控制,透明压缩,双向缓冲处理,数据导入导出共享,相当实用. 基本 ...
- python下载的库要放到哪里-Python下载url并保存文件的三种方法
本节主要内容: 学习python下载Url并保存文件的方法. Python中通常是使用Http利用urllib或urllib2模块来下载url中的内容. 当然也可以利用ftplib从ftp站点下载文件 ...
- python第三方库安装方法-Python第三方库安装
Python有一个全球社区:https://pypi.org/,在这里我们可以搜索任何主题的Python第三方库.PyPI全称是Python Package Index,指的是Python包的索引,它 ...
最新文章
- 2021年大数据Flink(十六):流批一体API Connectors ​​​​​​​​​​​​​​Redis
- Android Studio vs Eclipse:你需要知道的那些事
- 五、朴素贝叶斯分类算法
- POJ - 3683 Priest John's Busiest Day(2-SAT+路径打印)
- [原创]FineUI秘密花园(二十一) — 表格之动态创建列
- filter 灰度处理:公祭日,一行代码让页面变成黑白色调
- python 会计凭证_实际工作中,大多数单位都使用单式记账凭证。()
- 玩转springboot2.x之异步调用@Async
- 百度又要开放哪些无人车新能力?“老司机”Apollo3.5要来了,市中心开车无压力...
- Ev Dekorasyonu
- EDA实验课课程笔记(一)——linux操作系统及linux下的基本指令
- stm32单片机相同系列型号代码移植
- 双绞线的制作方式详解
- ionic 微博模板
- 网络基础之交换机原理及4大功能
- 学习笔记——共阳数码管的动态显示
- Android加载3D模型的学习笔记
- 城市道路井盖安全监测系统 opencv
- 1. 有1,2,3,4个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少?
- 大三上期末复习(网络安全物联网概论安全协议软件工程)
热门文章
- LabVIEW彩色图像分割(基础篇—14)
- LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)
- kernfs_link_sibling
- Invoker 2019CCPC秦皇岛站I题 简单DP
- linux中cooy命令_Linux复制指令
- c++创建包含opencv的dll供C,C#调用
- 残差平方和ssr的计算公式为_如何为你的回归问题选择最合适的机器学习方法?...
- Learn OpenGL (十一):光照贴图
- Udacity机器人软件工程师课程笔记(二十三) - 控制(其一)- PID控制及其python实现
- linux下远程传输文件命令scp使用注解