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

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结构,也就是可以一下上传多个MultipartFormData

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

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

2.1 Request

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

 

2.2 Response

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

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

3.1 Server类

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

 

3.2 Client类

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

服务器

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

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 <iostream>

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<<res->body<<std::endl;
    std::cout<<res->status<<std::endl;
    return 0;
}

运行如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值