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;
}
运行如下