From 55a4c63cfa35dd50db0981b6d7c30aea1c2ccb80 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 5 May 2017 23:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0http=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_httpClient.cpp | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 tests/test_httpClient.cpp diff --git a/tests/test_httpClient.cpp b/tests/test_httpClient.cpp new file mode 100644 index 00000000..bfd039a4 --- /dev/null +++ b/tests/test_httpClient.cpp @@ -0,0 +1,110 @@ +//============================================================================ +// Name : main.cpp +// Author : 熊子良 +// Version : +//============================================================================ + +#include <signal.h> +#include <unistd.h> +#include <iostream> +#include "Http/HttpDownloader.h" +#include "Http/HttpRequester.h" +#include "Util/logger.h" +#include "Util/onceToken.h" +#include "Util/File.h" +#include "Poller/EventPoller.h" +#include <list> + +using namespace std; +using namespace ZL::Util; +using namespace ZL::Http; +using namespace ZL::Poller; +using namespace ZL::Network; + +void programExit(int arg) { + EventPoller::Instance().shutdown(); +} +int main(int argc,char *argv[]){ + signal(SIGINT, programExit); + Logger::Instance().add(std::make_shared<ConsoleChannel>("stdout", LTrace)); + + ///////////////////////////////http downloader/////////////////////// + list<HttpDownloader::Ptr> downloaderList; + auto urlList = {"http://img3.imgtn.bdimg.com/it/u=158031390,1321729164&fm=214&gp=0.jpg", + "https://media-cdn.tripadvisor.com/media/photo-s/06/c3/2f/64/de-notre-chambre.jpg"}; + int i=0; + for(auto url : urlList){ + HttpDownloader::Ptr downloader(new HttpDownloader()); + downloader->setOnResult([](ErrCode code,const char *errMsg,const char *filePath){ + if(code == Err_success){ + InfoL << "download file success:" << filePath; + }else{ + WarnL << "code:" << code << " msg:" << errMsg; + } + }); + //断点续传功能,开启后可能会遇到416的错误(因为上次文件已经下载完全) + downloader->startDownload(url,exeDir() + to_string(i++) + ".jpg",true); + downloaderList.push_back(downloader); + } + + ///////////////////////////////http get/////////////////////// + HttpRequester::Ptr requesterGet(new HttpRequester()); + requesterGet->setMethod("GET"); + //设置http头,我们假设设置cookie + requesterGet->addHeader("Cookie","SESSIONID=e1aa89b3-f79f-4ac6-8ae2-0cea9ae8e2d7"); + requesterGet->startRequester("http://pv.sohu.com/cityjson?ie=utf-8", + [](const SockException &ex, + const string &status, + const HttpClient::HttpHeader &header, + const string &strRecvBody){ + if(ex){ + WarnL << "network err:" << ex.getErrCode() << " " << ex.what(); + }else{ + _StrPrinter printer; + for(auto &pr: header){ + printer << pr.first << ":" << pr.second << "\r\n"; + } + InfoL << "\r\nhttp status:" << status << "\r\n\r\n" + << "header:" << (printer << endl) + << "\r\nbody:" << strRecvBody; + } + }); + + ///////////////////////////////http post/////////////////////// + HttpRequester::Ptr requesterPost(new HttpRequester()); + requesterPost->setMethod("POST"); + HttpArgs args; + args["query"] = "test"; + args["from"] = "en"; + args["to"] = "zh"; + args["transtype"] = "translang"; + args["simple_means_flag"] = "3"; + requesterPost->addHeader("X-Requested-With","XMLHttpRequest"); + requesterPost->addHeader("Origin","http://fanyi.baidu.com"); + + requesterPost->setBody(args.make()); + requesterPost->startRequester("http://fanyi.baidu.com/langdetect", [](const SockException &ex, + const string &status, + const HttpClient::HttpHeader &header, + const string &strRecvBody){ + if(ex){ + WarnL << "network err:" << ex.getErrCode() << " " << ex.what(); + } else { + _StrPrinter printer; + for(auto &pr: header){ + printer << pr.first << ":" << pr.second << "\r\n"; + } + InfoL << "\r\nhttp status:" << status << "\r\n\r\n" + << "header:" << (printer << endl) + << "\r\nbody:" << strRecvBody; + } + }); + + EventPoller::Instance().runLoop(); + static onceToken token(nullptr,[](){ + EventPoller::Destory(); + Logger::Destory(); + }); + return 0; +} +