云备份——第三方库使用介绍(下)
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;
}
运行如下