目录 安装httplib库 认识httplib库 httplib请求类 httplib响应类 httplib中的Server类 httplib的client类 httplib库搭建简单的服务器 httplib库搭建简单的客
目录
进入GitHub,搜索httplib库
2.下载库
下载完毕将库的压缩包传输到linux系统下
4.解压库
unzip cpp-httplib-master.zip
namespace httplib{ //文件信息结构体 struct MultipartFORMData { std::string name; //字段名称 std::string content; //文件内容 std::string filename; //文件名称 std::string content_type;//文件类型 }; using MultipartFormDataitems = std::vector; struct Request { std::string method; //请求方法 std::string path; //资源路径 Headers headers; //请求报头 std::string body; //请求正文 // for server std::string version; //协议版本 Params params; //查询字符串 MultipartFormDataMap files;//保存的是客户端上传的文件信息 Ranges ranges; // //判断请求报头中有没有 某个字段 bool has_header(const char *key) const; //获取请求报头中对应的字段值 std::string get_header_value(const char *key, size_t id = 0) const; //将key-val的字段值设定在http请求中 void set_header(const char *key, const char *val); //判定是否有对应的文件 bool has_file(const char *key) const; //获取对应的文件信息 MultipartFormData get_file_value(const char *key) const; };
httplib类是将响应行,响应报头,响应正文设定到Response类的对象中,然后将Response对象组织成http响应的形式发送给对方。
struct Response { std::string version; //协议版本号,默认时http1.1 int status = -1; //响应状态码, std::string reason; Headers headers; //响应报头 std::string body; //响应正文 std::string location; // 重定向位置//以key-val将相应的字段设定到响应报头中 void set_header(const char *key, const char *val); void set_content(const std::string &s, const char *content_type); };
class Server { //Handler一个函数指针名称,它的参数是Request,和Response using Handler = std::function; //Handlers是一个映射表,它映射对应的请求资源和处理函数映射在一起 using Handlers = std::vector>; //将Get方法的请求资源与处理函数加载到Handlers表中 Server &Get(const std::string &pattern, Handler handler); Server &Post(const std::string &pattern, Handler handler); Server &Put(const std::string &pattern, Handler handler); Server &Patch(const std::string &pattern, Handler handler); Server &Delete(const std::string &pattern, Handler handler); Server &Options(const std::string &pattern, Handler handler); //线程池 std::function new_task_queue; //搭建并启动http bool listen(const char *host, int port, int Socket_flags = 0); };
Handler表结构:
如上面的Handlers表中:
线程池的工作
class Client { //构造一个客户端对象,传入服务器Ip地址和端口 Client(const std::string &host, int port); //向服务器发送GET请求 Result Get(const char *path, const Headers &headers); //向服务器发送Post请求 //path是路径,body是request请求路径 //content_length是正文大小 //content_type是正文的类型 Result Post(const char *path, const char *body, size_t content_length, const char *content_type); //以Post方法上传文件 Result Post(const char *path, const MultipartFormDataItems &items); }
搭建服务器的步骤:
#include #include"httplib.h" using namespace std; W>void Hello(const httplib::Request& req,httplib::Response& res){ res.set_content("Hello world","text/plain"); res.status=200; } void File(httplib::Request req,httplib::Response res){ //获取字段为file的文件 const auto& file=req.get_file_value("file"); std::cout<
注意:
#include"httplib.h" #define IP "119.23.41.13" #define PORT 8081 using namespace std; int main(){ //建立客户端对象 httplib::Client client(IP,PORT); //单个文件信息组织 httplib::MultipartFormData file; file.name="file"; file.content="hello world"; file.filename="Hello.txt"; file.content_type="text/plain"; //MultipartFormDataItems对象可以存储多个文件信息 httplib::MultipartFormDataItems item; item.push_back(file); //请求服务器上/file资源,发送item文件集合给服务器 auto result=client.Post("/file",item); return 0; }
--结束END--
本文标题: httplib库的安装以及使用
本文链接: https://www.lsjlt.com/news/411378.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-13
2024-05-13
2024-05-11
2024-05-11
2024-05-10
2024-05-07
2024-04-30
2024-04-30
2024-04-30
2024-04-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0