資源簡介
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)?< 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?“l(fā)ongjmp?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++ 實現(xiàn)屏幕水印
評論
共有 條評論