对curl的封装
来源:互联网 发布:2016网络彩票开售在即 编辑:程序博客网 时间:2024/06/09 20:18
http.h
#ifndef _HTTP_H_#define _HTTP_H_#include <string>#include <set>#include <curl/curl.h>namespace tools{class CCurlWrapper{public: CCurlWrapper (); ~CCurlWrapper (); int PostFile (const std::string& strUrl, const std::string& strRequest, std::string& strReply); int GetFile (const std::string& strUrl, std::string& strReply); void AddHttpHeader (const std::string& strHeader);private: int Init (); static size_t WriteDataCallback (void *ptr, size_t size, size_t nCount, void *pData); CURL *m_pCurl; std::set<std::string> m_setHeaders;};}#endif
http.cpp
#include "http.h"#include <sstream>using namespace std;using namespace tools;CCurlWrapper::CCurlWrapper () : m_pCurl(NULL){ //curl_global_init(CURL_GLOBAL_ALL); Init();}CCurlWrapper::~CCurlWrapper (){ curl_easy_cleanup(m_pCurl); m_pCurl = NULL;}int CCurlWrapper::Init (){ if (m_pCurl) { curl_easy_cleanup(m_pCurl); m_pCurl = NULL; } m_pCurl = curl_easy_init(); if (m_pCurl == NULL) { return -1; } // set connection timeout to 10's curl_easy_setopt(m_pCurl, CURLOPT_CONNECTTIMEOUT, 10); // set timeout to 30's curl_easy_setopt(m_pCurl, CURLOPT_TIMEOUT, 30); // accept identiy, deflate, and gzip encoding. (Accept-Encoding: ) curl_easy_setopt(m_pCurl, CURLOPT_ENCODING, "gzip, deflate"); // set user-agent to that of MSIE6 curl_easy_setopt(m_pCurl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"); // let curl to follow location (auto handle HTTP 301, 302) curl_easy_setopt(m_pCurl, CURLOPT_FOLLOWLOCATION, 1); m_setHeaders.clear(); m_setHeaders.insert("Accept-Language: zh-cn"); // output debug info (for debug only) //curl_easy_setopt(m_pCurl, CURLOPT_VERBOSE, true); curl_easy_setopt(m_pCurl, CURLOPT_VERBOSE, false); return 0;}void CCurlWrapper::AddHttpHeader (const string& strHeader){ m_setHeaders.insert(strHeader);}int CCurlWrapper::PostFile (const string& strUrl, const string& strRequest, string& strReply){ if (m_pCurl == NULL) return -1; int iRet; if (strUrl.empty()) { return -2; } curl_easy_setopt(m_pCurl, CURLOPT_URL, strUrl.c_str()); stringstream ssReply; curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA, &ssReply); curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, WriteDataCallback); // set post data if (strRequest.empty()) { return -3; } curl_easy_setopt(m_pCurl, CURLOPT_POST, true); curl_easy_setopt(m_pCurl, CURLOPT_POSTFIELDS, strRequest.c_str()); curl_easy_setopt(m_pCurl, CURLOPT_POSTFIELDSIZE, strRequest.length()); // autosave cookie with the handle curl_easy_setopt(m_pCurl, CURLOPT_COOKIEFILE, "/dev/null"); // set header struct curl_slist *headers = NULL; if (!m_setHeaders.empty()) { for (set<string>::iterator it = m_setHeaders.begin(); it != m_setHeaders.end(); ++it) headers = curl_slist_append(headers, it->c_str()); } curl_easy_setopt(m_pCurl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(m_pCurl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(m_pCurl, CURLOPT_SSL_VERIFYHOST, 0L); //curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA, &ssReply); //curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, WriteDataCallback); // perform iRet = curl_easy_perform(m_pCurl); if (iRet == CURLE_OK) { strReply = ssReply.str(); } if (headers) curl_slist_free_all(headers); return (iRet == CURLE_OK) ? 0 : iRet;}int CCurlWrapper::GetFile (const string& strUrl, string& strReply){ if (m_pCurl == NULL) return -1; int iRet; if (strUrl.empty()) { return -2; } curl_easy_setopt(m_pCurl, CURLOPT_URL, strUrl.c_str()); stringstream ssReply; curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA, &ssReply); curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, WriteDataCallback); curl_easy_setopt(m_pCurl, CURLOPT_HTTPGET, true); // autosave cookie with the handle curl_easy_setopt(m_pCurl, CURLOPT_COOKIEFILE, "/dev/null"); // set header struct curl_slist *headers = NULL; if (!m_setHeaders.empty()) { for (set<string>::iterator it = m_setHeaders.begin(); it != m_setHeaders.end(); ++it) headers = curl_slist_append(headers, it->c_str()); } curl_easy_setopt(m_pCurl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(m_pCurl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(m_pCurl, CURLOPT_SSL_VERIFYHOST, 0L); //curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA, &ssReply); //curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, WriteDataCallback); // perform iRet = curl_easy_perform(m_pCurl); if (iRet == CURLE_OK) { strReply = ssReply.str(); } if (headers) curl_slist_free_all(headers); return (iRet == CURLE_OK) ? 0 : iRet;}size_t CCurlWrapper::WriteDataCallback (void *ptr, size_t size, size_t nCount, void *pData){ stringstream* pTmp = (stringstream*) pData; pTmp->write((char*) ptr, size * nCount); return size * nCount;}
0 0
- 对curl的封装
- YII 1.1中对CURL的再封装
- curl的封装
- Curl 简单的封装
- CURL封装的类
- php的curl封装类
- php的curl封装类
- 【Linux】【curl】对curl的研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 对CURL的一些研究
- 封装好的CURL和Fsockopen函数
- ORACLE单机环境,实现开机自动启动数据库
- Linux 上线程开发 API 的概要介绍
- Android中Acition和Category常量表
- Android网络连接类型
- OpenGL ES之GLSurfaceView学习一:介绍
- 对curl的封装
- Intel IPP 之图像处理
- 生成器模式(Build)
- zf2+mysql Statement could not be executed (HY000 - 1030 - Got error 28 from storage engine)
- 2015 UESTC Winter Training 中的简单搜索
- 如何使用Dreamweaver设计限时自动关闭的网页
- Impala入门笔记(转载)
- IOS去警告
- Android编译系统makefile(Android.mk)写法