云备份——第三方库使用介绍(下)

httplib库,一个C++11单文件头的跨平台HTTP/HTTPS库。安装起来非常容易。只需包含httplib.h在你的代码中即可。

httplib库实际上是用于搭建一个简单的http服务器或者客户端的库,这种第三方网络库,可以让我们免去搭建服务器或客户端的时间,把更多的精力投入到具体的业务处理中,提高开发效率。

下面我们会逐步介绍一下httplib库的主要类

 一,MultipartForData结构体

    struct MultipartFormData {
        std::string name;//名字,注意不是文件名是该MultipartFormData个体的名字
        std::string content;//上传文件的内容
        std::string filename;//上传文件的名字
        std::string content_type;//上传文件内容的类
    };
    using MultipartFormDataItems = std::vector;//MultipartFormData数组。可以存储多个MultipartFormData结构,也就是可以一下上传多个MultipartFormData

 该类主要用于管理客户端上传的文件信息的结构体

 二,Request以及Response结构体类详解

2.1 Request

Request类主要是客户端用于构建该类保存HTTP相关信息,然后等待构建对应HTTP客户端报文发送给服务端进行处理

 云备份——第三方库使用介绍(下)_第1张图片

2.2 Response

主要用于服务端接收到Request后,进行业务处理,然后构建Response保存HTTP服务端响应信息,然后等待服务端构建对应HTTP报文进行返回

云备份——第三方库使用介绍(下)_第2张图片

三, 服务器(Server类)/客户端(Clinet类)构建

3.1 Server类

主要用来设置服务端在面对客户端不同请求的不同处理方式,以及Server的启动

 云备份——第三方库使用介绍(下)_第3张图片

3.2 Client类

云备份——第三方库使用介绍(下)_第4张图片

四,简易服务器和客户端搭建

服务器

#include "httplib.h"
#include 

int main()
{
    httplib::Server server;
    server.Get("/hello",[](const httplib::Request& req,httplib::Response& res){
        res.set_content("hello,I am server","text/plain");
        res.status=200;
    });
    server.Get(R"(/numbers/(\d+))",[&](const httplib::Request& req,httplib::Response& res){
        auto number=req.matches[1];
        res.set_content(number,"text/plain");
        res.status=200;
    });

    server.Post("/upload",[&](const httplib::Request& req,httplib::Response& res){
        if(!req.has_file("file1"))
        {
            res.set_content("no fund","text/plain");
            res.status=404;
        }

        const auto& file=req.get_file_value("file1");
        std::string content=file.filename;
        content+='\n';
        content+=file.content;
        res.set_content(content,"text/plain");
        res.status=200;


    });
    server.listen("0.0.0.0",8080);
    return 0;
}

客户端

#include "httplib.h"
#include 

int main()
{
    httplib::Client client("124.221.185.180",8080);
    httplib::MultipartFormData item;
    item.name="file1";
    item.content="hello,word";
    item.filename="test";
    item.content_type="text/plain";

    httplib::MultipartFormDataItems items;
    items.push_back(item);
    auto res=client.Post("/upload",items);
    std::cout<body<status<

运行如下

你可能感兴趣的:(#云备份系统,c++,linux)