资源简介
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++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- 漂亮的仪表盘(widget.cpp)
- c++ 多功能计算器
- C++17 In Detail
- 使用wxWidgets进行跨平台程序开发
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- 自动GetShell
- FTP客户端源码(c++)
评论
共有 条评论