c++ curl 的简单使用和从网页上抓取图片的代码
2014-07-24 18:45
543 查看
1. 简单配置
安装curl
apt-get curl
安装c++的库 libcurl4-openssl-dev
apt-get libcurl4-openssl-dev
2. 写代码时几个重要函数的介绍
curl_easy_init () / curl_easy_cleanup ()
CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter)
这个函数最重要;http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
CURLOPT_URL : 第三个参数设置为想要访问的URL
CURLOPT_HEADER : 文件头部信息是否可见第三个参数为不可见0
CURLOPT_HEADERFUNCTION : 当接收到头部信息时调用设置的回调函数
CURLOPT_VERBOSE : 是否报告异常0不接收
CURLOPT_TIMEOUT : 设置CURL允许执行的最长秒数
CURLOPT_DNS_CACHE_TIMEOUT : 设置超时,默认的DNS cache的超时时间为60秒
CURLOPT_WRITEFUNCTION : 设置内容写回的回调函数
CURLOPT_WRITEDATA : 设置内容将要写回的buffer
... ...
在写函数时,头部有返回值而函数中实际无返回直,有时会出现段错误
3. CURLcode curl_easy_porform(CURL *handle)
设置好以上后,调用该函数执行 OK!
4. 抓取图片的代码
/*************************************************************************
> File Name: image_read.h
> Author: zhanglp
> Mail: shixi_lipeng@staff.sina.com.cn
> Created Time: 2014年07月24日 星期四 11时52分10秒
************************************************************************/
#ifndef _MY_IMAGE_READ_H_
#define _MY_IMAGE_READ_H_
#include <curl/curl.h>
namespace image {
struct ImageBox {
std::string image_id;
std::string image_url;
std::string content_0;
std::string content_160x160;
std::string content_150x100;
};
size_t SaveFile (void *buffer, size_t size, size_t nmemb, void *stream);
class ImageReader {
public:
ImageReader ();
~ImageReader ();
bool LoadImage (const std::string url);
std::string GetContent (const std::string image_id, const std::string no);
private:
bool Init (void);
CURL *curl_obj_;
std::string url_font_;
std::string url_mid_;
std::string output_;
};
}
#endif
安装curl
apt-get curl
安装c++的库 libcurl4-openssl-dev
apt-get libcurl4-openssl-dev
2. 写代码时几个重要函数的介绍
curl_easy_init () / curl_easy_cleanup ()
CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter)
这个函数最重要;http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
CURLOPT_URL : 第三个参数设置为想要访问的URL
CURLOPT_HEADER : 文件头部信息是否可见第三个参数为不可见0
CURLOPT_HEADERFUNCTION : 当接收到头部信息时调用设置的回调函数
CURLOPT_VERBOSE : 是否报告异常0不接收
CURLOPT_TIMEOUT : 设置CURL允许执行的最长秒数
CURLOPT_DNS_CACHE_TIMEOUT : 设置超时,默认的DNS cache的超时时间为60秒
CURLOPT_WRITEFUNCTION : 设置内容写回的回调函数
CURLOPT_WRITEDATA : 设置内容将要写回的buffer
... ...
在写函数时,头部有返回值而函数中实际无返回直,有时会出现段错误
3. CURLcode curl_easy_porform(CURL *handle)
设置好以上后,调用该函数执行 OK!
4. 抓取图片的代码
/*************************************************************************
> File Name: image_read.h
> Author: zhanglp
> Mail: shixi_lipeng@staff.sina.com.cn
> Created Time: 2014年07月24日 星期四 11时52分10秒
************************************************************************/
#ifndef _MY_IMAGE_READ_H_
#define _MY_IMAGE_READ_H_
#include <curl/curl.h>
namespace image {
struct ImageBox {
std::string image_id;
std::string image_url;
std::string content_0;
std::string content_160x160;
std::string content_150x100;
};
size_t SaveFile (void *buffer, size_t size, size_t nmemb, void *stream);
class ImageReader {
public:
ImageReader ();
~ImageReader ();
bool LoadImage (const std::string url);
std::string GetContent (const std::string image_id, const std::string no);
private:
bool Init (void);
CURL *curl_obj_;
std::string url_font_;
std::string url_mid_;
std::string output_;
};
}
#endif
/************************************************************************* > File Name: image_read.cpp > Author: zhanglp > Mail: shixi_lipeng@staff.sina.com.cn > Created Time: 2014年07月24日 星期四 11时59分33秒 ************************************************************************/ #include <iostream> #include "image_read.h" #include "logging.h" namespace image { ImageReader::ImageReader () { curl_obj_ = NULL; url_font_.append ("http://i0.gallery.yunstatic.com/httpgallery/?mediaid="); url_mid_.append ("&st="); } ImageReader::~ImageReader () { curl_easy_cleanup (curl_obj_); } size_t SaveFile (void *buffer, size_t size, size_t nmemb, void *stream) { std::string *tmp = (std::string*)stream; if (NULL == tmp) { LOG (ERROR) << "failed to be write."; return false; } tmp->append ((char*)buffer, size * nmemb); return size * nmemb; } bool ImageReader::LoadImage (const std::string url) { if (false == Init ()) return false; curl_easy_reset (curl_obj_); curl_easy_setopt (curl_obj_, CURLOPT_URL, url.c_str ()); curl_easy_setopt (curl_obj_, CURLOPT_HEADER, 0); curl_easy_setopt (curl_obj_, CURLOPT_VERBOSE, 0); curl_easy_setopt (curl_obj_, CURLOPT_TIMEOUT, 1500); curl_easy_setopt (curl_obj_, CURLOPT_DNS_CACHE_TIMEOUT, 60 * 60 * 72); curl_easy_setopt (curl_obj_, CURLOPT_WRITEFUNCTION, &SaveFile); curl_easy_setopt (curl_obj_, CURLOPT_WRITEDATA, &output_); CURLcode res = curl_easy_perform (curl_obj_); if (CURLE_OK != res) return false; return true; } bool ImageReader::Init (void) { curl_obj_ = curl_easy_init (); if (NULL == curl_obj_) { LOG (ERROR) << "failed to curl init."; return false; } return true; } std::string ImageReader::GetContent (const std::string image_id, const std::string no) { std::string url = url_font_ + image_id + url_mid_ + no; std::cout << url << std::endl; if (false == LoadImage (url)) { output_.clear (); } return output_; } } using image::ImageReader; using image::ImageBox; bool GetImageByImageID (ImageBox* image_box) { if (image_box->image_id.empty ()) { return false; } std::string ret; image::ImageReader image; std::string no ("1"); image_box->content_0 = image.GetContent (image_box->image_id, no); no.clear (); no.append ("3"); image_box->content_160x160 = image.GetContent (image_box->image_id, no); no.clear (); no.append ("4"); image_box->content_150x100 = image.GetContent (image_box->image_id, no); if (image_box->content_0.empty () && image_box->content_160x160.empty () && image_box->content_150x100.empty () ) { return false; } return true; }
相关文章推荐
- Python实现简单网页图片抓取完整代码实例
- 使用PHP简单网页抓取和内容分析
- 使用php代码从网页中提取有效图片地址
- 使用vb获取网页源文件并保存的简单代码
- 使用PHP简单网页抓取和内容分析
- 使用Python抓取网页图片[转载]
- Javascript浮动广告图片代码,已封装!兼容性强!使用简单!
- 在C/C++代码中使用SSE等指令集的指令(5)SSE进行加法运算简单的性能测试
- 使用windbg进行简单的debug c++代码
- 使用curl抓取网页遇到HTTP跳转时得到多个HTTP头部的问题
- 在C/C++代码中使用SSE等指令集的指令(5)SSE进行加法运算简单的性能测试
- PHP 抓取网页图片并且另存为的实现代码
- Javascript浮动广告图片代码,已封装!兼容性强!使用简单!
- 在C/C++代码中使用SSE等指令集的指令(5)SSE进行加法运算简单的性能测试
- 使用curl抓取网页遇到HTTP跳转时得到多个HTTP头部的问题
- 一行代码抓取网页中所有的图片
- 简单的网页html代码使用说明
- 简单的一个CSS菜单,不用图片也很好看_网页代码站(www.webdm.cn)
- java正则表达式简单使用和网页爬虫的制作代码
- 使用PHP简单网页抓取和内容分析