प्रौद्योगिकी साझेदारी

cpp http सर्वर/ग्राहक

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

httplib

उपयुञ्जताम्‌httplib पुस्तकालयः

बेसदेमो

सर्वर.सीपीपी

#include "httplib.h"
#include <iostream>
using namespace httplib;

int main(void)
{
    Server svr;
 
    svr.Get("/hello", [](const Request& req, Response& res) {
        std::cout << "log, path=" << req.path << std::endl;
        auto it = req.params.find("name");
        std::string name;
        if(it != req.params.end()){
            name = it->second;
        }
        res.set_content("Hello "+name, "text/plain");
    });
    
    svr.listen("0.0.0.0", 50000);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

कर्लं कुरुत

$ curl "127.0.0.1:50000/hello?name=zhangsan"
Hello zhangsan%
  • 1
  • 2

client.cpp

#include <httplib.h>
#include <iostream>

using namespace httplib;

int main(void){
    Client cli("127.0.0.1", 50000);

    if (auto res = cli.Get("/hello?name=zhangsi")) {
        std::cout << res->status << std::endl;
        std::cout << res->get_header_value("Content-Type") << std::endl;
        std::cout << res->body << std::endl;
    } else {
        std::cout << "error code: " << res.error() << std::endl;
    }

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

क्लायन्ट् चालयन्तु

$ g++ tclient.cpp -g -std=c++11 -o tclient && ./tclient
200
text/plain
Hello zhangsi
  • 1
  • 2
  • 3
  • 4

commondemo इति

यत्र struct andjson परिवर्तनम्पश्यतुcpp struct json परस्पर परिवर्तन

सर्वर.सीपीपी

#include <unistd.h>
#include "httplib.h"
#include <iostream>
#include <mockutil.h>
using namespace httplib;

int main(void)
{
    Server svr;
    UserUtil mock_user_util;

    svr.Get("/hello", [](const Request& req, Response& res) {
        std::cout << "log, path=" << req.path << std::endl;
        auto it = req.params.find("name");
        std::string name;
        if(it != req.params.end()){
            name = it->second;
        }
        res.set_content("Hello "+name, "text/plain");
    });

    svr.Get(R"(/user/(w+)/get)", [&](const Request& req, Response& res) {
        auto uname = req.matches[1];
        User* user = mock_user_util.get(uname.str());
        std::string ret;
        if(user==nullptr){
            ret = "get no user(name="+uname.str()+")";
        }else{
            json j;
            user->to_json(j);
            ret = j.dump();
        }
        res.set_content(ret, "text/plain");
    });

    svr.Post(R"(/user/(w+)/set)", [&](const Request& req, Response& res) {
        auto uname = req.matches[1];
        User user;
        user.from_json(req.body);
        mock_user_util.set(user);
        res.set_content("ok", "text/plain");
    });

    
    svr.listen("0.0.0.0", 50001);
    std::cout << "1111" << std::endl;
    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

client.cpp

#include <httplib.h>
#include <iostream>
#include "mockutil.h"
using namespace httplib;

int main(void){
    Client cli("127.0.0.1", 50001);

    auto res = cli.Get("/user/zhangwu/get");
    User user;
    user.from_json(res->body);
    std::cout << "get user, name=" << user.Name << ", Phone=" << user.MPhone.Num << std::endl;

    user.MPhone.Num = 88888;
    json j;
    user.to_json(j);
    auto res2 = cli.Post("/user/zhangwu/set", j.dump(), "application/json");
    std::cout << "set user, name=" << user.Name << ", Phone=" << user.MPhone.Num << std::endl;

    auto res3 = cli.Get("/user/zhangwu/get");
    User userx;
    userx.from_json(res3->body);
    std::cout << "get after set, name=" << userx.Name << ", Phone=" << userx.MPhone.Num << std::endl;

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

क्लायन्ट् चालयन्तु

$ g++ tclient.cpp -g -std=c++11 -I./ -o tclient && ./tclient
get user, name=zhangwu, Phone=12345
set user, name=zhangwu, Phone=88888
get after set, name=zhangwu, Phone=88888
  • 1
  • 2
  • 3
  • 4