资源简介
c++封装了curl的get,post,download
代码片段和文件信息
#include “stdafx.h“
#include “Httper.h“
#include
#include
#include
#include
#include
#include
#include
#include “FunAssistant.h“
#include “FileAssistant.h“
using namespace std;
HttpRs* HttpRs::g_curlFailed = nullptr;
size_t write_data(void *ptr size_t size size_t nmemb void *stream) {
string data((const char*)ptr (size_t)size * nmemb);
*((stringstream*)stream) << data << endl;
return size * nmemb;
}
size_t write_file(void *ptr size_t size size_t nmemb FILE *stream)
{
size_t written;
written = fwrite(ptr size nmemb stream);
return written;
}
//////////////////////////////////////////////////////////////////////////
HttpRs* HttpRs::CurlFailed()
{
if (nullptr == g_curlFailed) {
g_curlFailed = new HttpRs(false ““);
}
return g_curlFailed;
}
//////////////////////////////////////////////////////////////////////////
void Httper::globalInit()
{
curl_global_init(CURL_GLOBAL_ALL);
}
void Httper::globalClean()
{
curl_global_cleanup();
}
HttpRs Httper::get(const std::string& url)
{
std::stringstream out;
MyCurl curl = normalCurl(url std::vector () &out);
if (nullptr == curl.curl) {
return *HttpRs::CurlFailed();
}
return request(&curl &out);
}
HttpRs Httper::post(const std::string& url const std::string& postFields)
{
std::stringstream out;
MyCurl mycurl = normalCurl(url std::vector () &out);
if (nullptr == mycurl.curl) {
return *HttpRs::CurlFailed();
}
curl_easy_setopt(mycurl.curl CURLOPT_POST 1);
curl_easy_setopt(mycurl.curl CURLOPT_POSTFIELDS postFields.c_str());
return request(&mycurl &out);
}
HttpRs Httper::request(MyCurl *mycurl std::stringstream* rs)
{
AutoCleanMyCurl clean(mycurl);
CURLcode res = curl_easy_perform(mycurl->curl);
if (res != CURLE_OK) {
return HttpRs(false curl_easy_strerror(res));
}
return HttpRs(true rs->str());
}
HttpRs Httper::download(const std::string& url const std::vector& headers const std::string& outfilename)
{
CURL *curl = curl_easy_init();
if (nullptr == curl) {
return *HttpRs::CurlFailed();
}
curl_easy_setopt(curl CURLOPT_URL url.c_str());
curl_easy_setopt(curl CURLOPT_WRITEFUNCTION write_file);
FILE *fp = fopen(outfilename.c_str() “wb“);
curl_easy_setopt(curl CURLOPT_WRITEDATA fp);
curl_easy_setopt(curl CURLOPT_VERBOSE 1L);
curl_easy_setopt(curl CURLOPT_FOLLOWLOCATION 1L);
curl_easy_setopt(curl CURLOPT_NOSIGNAL 1); //Prevent “longjmp causes uninitialized stack frame“ bug
curl_easy_setopt(curl CURLOPT_ACCEPT_ENCODING “deflate“);
struct curl_slist *chunk = NULL;
std::for_each(headers.begin() headers.end() [&](const std::string& header)
{
chunk = curl_slist_append(chunk header.c_str());
});
AutoCleanMyCurl clean(&MyCurl(curl chunk));
CURLcode res = curl_easy_perform(curl);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4028 2015-07-21 17:49 curlpp\Httper.cpp
文件 1349 2015-07-21 16:52 curlpp\Httper.h
文件 262144 2015-07-21 11:58 curlpp\libcurl.dll
文件 13900 2015-07-21 11:58 curlpp\libcurl.lib
目录 0 2015-07-24 14:56 curlpp
----------- --------- ---------- ----- ----
281421 5
- 上一篇:卡尔曼滤波和互补滤波参考程序
- 下一篇:C++ 实现屏幕水印
相关资源
- C++学生健康管理系统
- glut.3.7.6+.DevPak
- 简单的FTP系统设计+设计报告
- libstdc++-3.4.638886
- 南京航空航天大学 皮德常 c++ 源代码
- 用Socket写的HTTP类,商业级C++源码。
- 一个Lex/Yacc完整的(可使用C++)
- c++builder2010 授权文件
- PL0超强扩展(可视化)
- Dijkstra单源最短路径代码 C/C++实现
- QTQTabWidget文字垂直显示Demo源码
- BP神经网络的c++实现
- C++传递自定义类型作为参数到Qml
- C++Builder下TTreeView 编程
- 迷宫问题_数据结构C++课程设计_带报告
- 一个c++buffer的设计和实现
- C++实现的可以安全的暂停、继续、停
- vc++6.0开发的音频采集程序
- VC++ 导入excel数据
- 经典差分进化算法的C++语言实现
- BP算法实现圆迹SAR点目标仿真C++语言
- qt 滑屏翻页效果C++程序
- Hough变换C++程序
- 《 C++编程思想》(第二版)练习题答
- 列主元LU分解 C++程序
- 箱子求解V2.0C++/MFC)
- 图像直方图均衡化C++实现
- C语言双向链表基本操作
- More effective C++ 中文版, 35个改善编程
- apriori算法(C++实现)28359
评论
共有 条评论