c++ 使用poco搭建一個(gè)http服務(wù)器

http知識(shí)與技巧

  • 首先客戶端發(fā)送REQUEST, 服務(wù)端收到后發(fā)回RESPONSE, 完成一次HTTP請求

  • REQUEST一般用GET或者POST類型

    • GET類型不包含body塊, 可以在url上向服務(wù)器發(fā)送信息
    • POST類型包含body塊, 可以利用它向服務(wù)器發(fā)送大量信息
  • 測試http請求可以使用curl命令

# 使用curl發(fā)送POST請求到服務(wù)端的命令
# -X 請求是POST請求
# -H 指明了body是json格式
# -d 包含body內(nèi)容
# 127.0.0.1:8001 本機(jī)IP地址以及服務(wù)器監(jiān)聽的端口
curl -X POST -H "Content-Type: application/json" -d '"{"key": "value"}"' 127.0.0.1:8001

源碼與編譯

編譯命令

g++ main.cpp -l PocoJSON -l PocoFoundation -l PocoNet -l PocoUtil

main.cpp

#include <iostream>

#include <Poco/Net/HTTPRequestHandler.h>
#include <Poco/Net/HTTPRequestHandlerFactory.h>
#include <Poco/Net/HTTPServer.h>
#include <Poco/Net/HTTPServerParams.h>
#include <Poco/Net/HTTPServerRequest.h>
#include <Poco/Net/HTTPServerResponse.h>
#include <Poco/Net/ServerSocket.h>
#include <Poco/Util/ServerApplication.h>
#include <Poco/StreamCopier.h>

using Poco::Net::HTTPRequestHandler;
using Poco::Net::HTTPRequestHandlerFactory;
using Poco::Net::HTTPServer;
using Poco::Net::HTTPServerParams;
using Poco::Net::HTTPServerRequest;
using Poco::Net::HTTPServerResponse;
using Poco::Net::ServerSocket;

using Poco::Util::Application;
using Poco::Util::ServerApplication;

#define SERVER_PORT 8001
class TimeRequestHandler : public HTTPRequestHandler {
private:
        std::string _str;
public:
    TimeRequestHandler(std::string str): _str(str) {}

    //當(dāng)客戶端發(fā)送http請求后, 服務(wù)端
    void handleRequest(HTTPServerRequest &req, HTTPServerResponse &res) override {
        Application &app = Application::instance();

        std::ostream &ostr = res.send();
        res.setChunkedTransferEncoding(true);
        res.setContentType("text/html");

        //返回給客戶端的內(nèi)容
        ostr << "<html><head><title>HTTPTimeServer powered by "
                "POCO C++ Libraries</title>";
        ostr << "<body><p style=\"text-align: center; "
                "font-size: 48px;\">";
        ostr << req.clientAddress().toString();
        ostr << "</p></body></html>";

        //打印從客戶端發(fā)來的信息
        std::string recv_string;
        Poco::StreamCopier::copyToString(req.stream(), recv_string);
        std::cout << _str << "-data-"<< recv_string << std::endl;
    }
};

class TimeRequestHandlerFactory : public HTTPRequestHandlerFactory {
public:
    TimeRequestHandlerFactory() {}

    HTTPRequestHandler *
    createRequestHandler(const HTTPServerRequest &req) override {
        //如何回復(fù)http請求
        return new TimeRequestHandler(req.getURI());
    }
};

class HTTPTimeServer : public ServerApplication {
protected:
    int main(const std::vector<std::string> &args) override {

        ServerSocket svs(SERVER_PORT);
        //設(shè)置了服務(wù)器監(jiān)聽的端口, 設(shè)置了http的請求發(fā)送到服務(wù)器的時(shí)候
        //應(yīng)該如何處理 TimeRequestHandlerFactory
        HTTPServer srv(new TimeRequestHandlerFactory(), svs,
                        new HTTPServerParams);
        srv.start();
        waitForTerminationRequest();
        srv.stop();

        return Application::EXIT_OK;
    }
};

int main(int argc, char **argv) {
    HTTPTimeServer app;
    return app.run(argc, argv);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缀磕,隨后出現(xiàn)的幾起案子洞渤,更是在濱河造成了極大的恐慌熊咽,老刑警劉巖儒将,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卿闹,死亡現(xiàn)場離奇詭異粘勒,居然都是意外死亡竞端,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門庙睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來事富,“玉大人,你說我怎么就攤上這事乘陪≌月” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵暂刘,是天一觀的道長饺谬。 經(jīng)常有香客問我,道長谣拣,這世上最難降的妖魔是什么募寨? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮森缠,結(jié)果婚禮上拔鹰,老公的妹妹穿的比我還像新娘。我一直安慰自己贵涵,他們只是感情好列肢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布恰画。 她就那樣靜靜地躺著,像睡著了一般瓷马。 火紅的嫁衣襯著肌膚如雪拴还。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天欧聘,我揣著相機(jī)與錄音片林,去河邊找鬼。 笑死怀骤,一個(gè)胖子當(dāng)著我的面吹牛费封,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒋伦,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弓摘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痕届?” 一聲冷哼從身側(cè)響起韧献,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爷抓,沒想到半個(gè)月后势决,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阻塑,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓝撇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陈莽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渤昌。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖走搁,靈堂內(nèi)的尸體忽然破棺而出独柑,到底是詐尸還是另有隱情,我是刑警寧澤私植,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布忌栅,位于F島的核電站,受9級(jí)特大地震影響曲稼,放射性物質(zhì)發(fā)生泄漏索绪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一贫悄、第九天 我趴在偏房一處隱蔽的房頂上張望瑞驱。 院中可真熱鬧,春花似錦窄坦、人聲如沸唤反。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彤侍。三九已至肠缨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拥刻,已是汗流浹背怜瞒。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留般哼,地道東北人吴汪。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蒸眠,于是被迫代替她去往敵國和親漾橙。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容