用pycharm做网站,typecho 转wordpress,网站备案主体注销,自己在线制作logo免费头像目录
引言
一. httplib库概述
二. httplib核心组件
2.1 数据结构
2.2 类和函数
2.3 服务器搭建
编辑
结语 引言 在现代软件开发中#xff0c;HTTP服务是网络应用的基础。对于需要快速搭建HTTP服务器或客户端的场景#xff0c;使用成熟的第三方库可以极大提高开发效…目录
引言
一. httplib库概述
二. httplib核心组件
2.1 数据结构
2.2 类和函数
2.3 服务器搭建
编辑
结语 引言 在现代软件开发中HTTP服务是网络应用的基础。对于需要快速搭建HTTP服务器或客户端的场景使用成熟的第三方库可以极大提高开发效率。本文将详细介绍httplib——一个C11单文件头的跨平台HTTP/HTTPS库以及如何使用它搭建一个简单的HTTP服务器。 一. httplib库概述 httplib是一个用C编写的轻量级库它提供了创建HTTP服务器和客户端的基本功能。由于它是一个单文件头库集成起来非常方便只需包含httplib.h在你的代码中即可。 二. httplib核心组件
namespace httplib
{struct MultipartFormData{std::string name;std::string content;std::string filename;std::string content_type;};using MultipartFormDataItems std::vectorMultipartFormData;struct Request{std::string method; // 存放请求⽅法std::string path; // 存放请求资源路径Headers headers; // 存放头部字段的键值对mapstd::string body; // 存放请求正⽂// for serverstd::string version; // 存放协议版本Params params; // 存放url中查询字符串 keyvalkeyval的 键值对mapMultipartFormDataMap files; // 存放⽂件上传时正⽂中的⽂件信息Ranges ranges;bool has_header(const char *key) const; // 判断是否有某个头部字段std::string get_header_value(const char *key, size_t id 0) const; // 获取头部字段值void set_header(const char *key, const char *val); // 设置头部字段bool has_file(const char *key) const; // ⽂件上传中判断是否有某个⽂件的信息MultipartFormData get_file_value(const char *key) const; // 获取指定的⽂件信息};struct Response{std::string version; // 存放协议版本int status -1; // 存放响应状态码std::string reason;Headers headers; // 存放响应头部字段键值对的mapstd::string body; // 存放响应正⽂std::string location; // Redirect location重定向位置void set_header(const char *key, const char *val); // 添加头部字段到headers中 void set_content(const std::string s, const char *content_type); // 添加正⽂到body中 void set_redirect(const std::string url, int status 302); // 设置全套的重定向信息};class Server{using Handler std::functionvoid(const Request , Response ); // 函数指针类型using Handlers std::vectorstd::pairstd::regex, Handler; // 存放请求-处理函数映射std::functionTaskQueue *(void) new_task_queue; // 线程池Server Get(const std::string pattern, Handler handler); // 添加指定GET⽅法的处理映射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);bool listen(const char *host, int port, int socket_flags 0); // 开始服务器监听bool set_mount_point(const std::string mount_point, const std::string dir,Headers headers Headers()); // 设置http服务器静态资源根⽬录};
}
2.1 数据结构 MultipartFormData用于处理文件上传的表单数据。Request代表入站请求包含请求方法、路径、头部字段、请求正文等。Response代表出站响应包含协议版本、状态码、头部字段、响应正文等。 2.2 类和函数 Server代表HTTP服务器可以设置路由、处理请求、启动监听等。Handlers用于存储请求处理器映射方便添加请求处理逻辑。 2.3 服务器搭建 使用httplib搭建服务器通常包括以下步骤 创建Server对象。设置静态资源目录如果需要。添加请求处理函数映射。启动服务器监听。 #include httplib.hint main(void) {using namespace httplib;Server svr;// 设置静态资源目录auto ret svr.set_mount_point(/, ./www);if (!ret) {std::cerr Failed to set mount point std::endl;return -1;}// 添加GET请求处理函数svr.Get(/hi, [](const Request req, Response res) {res.set_content(Hello World!, text/plain);});// 添加GET请求处理函数支持正则匹配svr.Get(R(/numbers/(\d)), [](const Request req, Response res) {auto numbers req.matches[1];res.set_content(numbers, text/plain);});// 添加POST请求处理函数处理文件上传svr.Post(/multipart, [](const auto req, auto res) {auto size req.files.size();if (req.has_file(file1)) {const auto file req.get_file_value(file1);std::cout file.filename std::endl;std::cout file.content_type std::endl;std::cout file.content std::endl;}});// 启动服务器监听svr.listen(0.0.0.0, 9090);return 0;
} 运行结果 结语
httplib库为C开发者提供了一个快速搭建HTTP服务器的解决方案。通过本文的介绍和示例代码你应该能够理解如何使用httplib创建HTTP服务并处理基本的HTTP请求。虽然httplib功能强大但在生产环境中使用时还需要考虑安全性、错误处理、性能优化等多方面因素。