ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

cpp-httplib:5 分钟搭起 C++ HTTP 服务的单文件库

cpp-httplib:5 分钟搭起 C++ HTTP 服务的单文件库 cpp-httplib5 分钟搭起 C HTTP 服务的单文件库【免费下载链接】cpp-httplibA C header-only HTTP/HTTPS server and client library项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib给一个 C 程序加 HTTP 接口往往要从 socket、请求头解析、路由表一路写起半天过去接口还没影。cpp-httplib 是个C11 单文件、零依赖的 HTTP 库Server和Client都装在同一个头文件里。它最大的差异化很简单拷一个httplib.h进工程、#include一下几分钟内就能跑通第一个响应。常见用法有三类给现有 C 程序加 REST 接口、在设备上起个 Web 管理页、服务之间互相调 HTTP。30 秒认识 cpp-httplib一个头文件装下的 HTTP/HTTPS 服务器加客户端档案如下语言标准C11 起步C17 写起来更顺手依赖零依赖纯头文件TLS 是可选的按宏接入 OpenSSL、Mbed TLS 或 wolfSSL 三种后端安装没有安装步骤把httplib.h拷进项目即可不需要 CMake 或子模块平台Windows / Linux / macOS官方明确不支持 32 位平台体量httplib.h 约 2.3 万行全库功能都在这一个文件里协议仅HTTP/1.1HTTP/2 与 HTTP/3 未实现最快路径3 步跑通第一个 HTTP 接口第 1 步拿库。克隆仓库或只把httplib.h拷到你的项目目录git clone https://gitcode.com/GitHub_Trending/cp/cpp-httplib第 2 步写最小程序。存成server.cpp下面这个示例就是全部代码// server.cpp最小程序只有 3 行核心逻辑 #include httplib.h int main() { httplib::Server svr; svr.Get(/, [](const httplib::Request, httplib::Response res) { res.set_content(Hello, cpp-httplib!, text/plain); }); return svr.listen(0.0.0.0, 8080) ? 0 : 1; }第 3 步编译并运行。Linux / macOS 记得带-pthreadg -stdc11 -pthread -o server server.cpp ./server浏览器打开http://localhost:8080看到Hello, cpp-httplib!就说明一切就绪。它真正值钱的地方①HTTPS 一个宏开启。包含头文件前定义CPPHTTPLIB_OPENSSL_SUPPORT就多出SSLServer和SSLClient两个类不想用 OpenSSL 也可换 Mbed TLS 或 wolfSSL 后端对嵌入式环境更友好。对新手来说加密连接不再是再学一个库的事httplib::SSLServer svr(./cert.pem, ./key.pem); // 两行证书HTTPS 服务就位②服务器与客户端同一套 API。svr.Get(/path, handler)定义路由cli.Get(/path)发起请求两边的写法和心智模型是打通的。客户端调用是阻塞式的返回optional适合把多个下游服务像函数一样一层层编排起来。③静态文件和实时推送原生支持。set_mount_point(/, ./web_root)一行就能把整个目录吐出去前端页面直接用WebSocket 与 SSE 也不需要额外依赖。官方文档里用这套组合搭了一个翻译应用的网页界面适合谁又该劝退谁最适合的三类场景给现有 C 程序暴露 REST 数据接口——不用引入重型框架几个路由就把接口搭完嵌入式 / IoT 设备的 Web 管理页——静态页做界面几个/api/*端点控制硬件服务间调用的客户端——Client的阻塞语义直白读起来像普通函数调用两条硬限制先看清再决定阻塞式 I/O 模型不是非阻塞 / 异步框架——高并发网关不是它的主场定位就是简单优先仅支持 HTTP/1.1——链路依赖多路复用或 0-RTT 的话需要另选方案使用注意生产环境务必走 HTTPS正确配置证书与校验别随手关掉客户端记得检查返回值失败时res.error()会给出原因两个让代码更顺手的用法1. 路由前统一钩子。想在真正路由之前做鉴权、限流、日志用set_pre_routing_handler拦一层// 路由前统一钩子先鉴权再放行 svr.set_pre_routing_handler([](const httplib::Request req, httplib::Response res) - httplib::Server::HandlerResponse { if (!authorized(req)) { res.status 401; return httplib::Server::HandlerResponse::Handled; // 已处理直接返回 } return httplib::Server::HandlerResponse::Unhandled; // 继续正常路由 });写一次鉴权所有路由自动生效不用在每个 handler 里重复检查。2. 接收文件上传。multipart 表单里的文件字段可以直接取出内容、文件名都已就绪svr.Post(/upload, [](const httplib::Request req, httplib::Response res) { const auto file req.form.get_file(file); // 取上传的文件字段 std::ofstream out(file.filename, std::ios::binary); // 按需落盘 out.write(file.content.data(), file.content.size()); res.set_content(ok, text/plain); });配 示例目录 里的upload.cc和uploader.sh上传链路十分钟就能验证完。接下来读什么httplib.h完整 API 都写在头文件内联注释里函数名和参数一目了然docs-src/pages/en/tour/入门教程按客户端 → 服务器 → TLS → WebSocket的顺序讲example/server.cc、client.cc、wsecho.cc、upload.cc等独立小例子照着改最快docs-src/pages/en/cookbook/进阶食谱鉴权、压缩、超时、mTLS、WebSocket 超时都有现成做法官方文档里这个 C HTTP 库还被从头到尾用来搭过一个桌面应用如果你正需要给 C 程序快速加一个能跑的 HTTP 接口现在就可以把httplib.h拷进工程照着上面的 3 步把第一个路由跑起来。【免费下载链接】cpp-httplibA C header-only HTTP/HTTPS server and client library项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表