不装任何第三方库也能写 Web 服务:Cpp-httplib 零依赖实战
【免费下载链接】cpp-httplibA C++ header-only HTTP/HTTPS server and client library项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib
想给设备开个查询接口,或手边临时需要个测试 API?Cpp-httplib 是个C++ header-only 库,把轻量级 HTTP 服务器和客户端都塞进了单个头文件,你 include 一下就能直接写服务,编译也就一条命令的事。
它到底是个什么东西
- 单文件 Header-only:全部代码都在 httplib.h 里,拷进工程就能用,不用装、不用配依赖
- C++11 起步:编译器支持 C++11 就能编译
- 服务器、客户端一体:既能用
Server收请求,也能用Client发请求,一个库两头通吃 - 零外部依赖:默认啥第三方库都不引;要上 HTTPS 才需要链接 OpenSSL
一句话点边界:它走的是阻塞式 socket I/O,连接数上去后容易吃紧,扛不住高并发。
三步把它跑起来
先拿到头文件。嫌拷单文件麻烦,也可以直接克隆仓库(地址:https://gitcode.com/GitHub_Trending/cp/cpp-httplib),把httplib.h放进工程目录即可。
再写一段最短的 Hello World,存成hello.cc:
#include <httplib.h> int main() { httplib::Server svr; svr.Get("/hi", [](const httplib::Request&, httplib::Response& res) { res.set_content("Hello World!", "text/plain"); }); svr.listen("127.0.0.1", 8080); }一条命令编译并运行,多线程记得带-pthread:g++ -std=c++11 hello.cc -o hello -pthread
然后浏览器打开http://127.0.0.1:8080/hi,看到Hello World!就说明这个 C++ 轻量 HTTP 服务器跑通了。跑起来后你在本地访问的效果大概长这样:
三个高频实战技巧
用路径参数接住 :id
路由里写:id,handler 里就能从req.path_params把它取出来。
svr.Get("/users/:id", [](const httplib::Request& req, httplib::Response& res) { auto id = req.path_params.at("id"); res.set_content("User " + id, "text/plain"); });得到的是GET /users/42时id为"42",你拿它去查库、拼 JSON 都行。
一行 set_mount_point 托管静态目录
把某个 URL 前缀映射到一个目录,浏览器访问前缀下的路径就直接返回文件。
int main() { httplib::Server svr; svr.set_mount_point("/", "./www"); svr.listen("127.0.0.1", 8080); }得到的效果:./www里的 HTML、CSS、图片都能直接打开,MIME 类型也帮你按扩展名设好。仓库里 test/www 就是一组现成的示例页面,可以直接对着试。
把 HTTP 客户端写进你的程序
Client用来发请求,返回值是optional,请求成功直接取res,失败走else拿错误码。
#include <httplib.h> #include <iostream> int main() { httplib::Client cli("http://127.0.0.1:8080"); if (auto res = cli.Get("/hi")) std::cout << res->status << " " << res->body << std::endl; }得到的是状态码加响应体,POST、PUT、DELETE 以及带 header、表单的方法写法同理,一行一个。
先避这几个坑 📌
- C++ 标准:至少 C++11,编译时给
-std=c++11(或更高) - OpenSSL 宏的位置:
CPPHTTPLIB_OPENSSL_SUPPORT必须写在#include <httplib.h>之前,顺序反了 SSL 编译不进去 - 阻塞模型的并发上限:一个连接基本占一个线程,QPS 别指望高,定位是轻量服务
- 32 位平台不支持:官方明确不维护 32 位目标,别在上面跑生产
- 链接 pthread:用到线程的示例都要加
-pthread,少一个就链接报错
该不该选它 ✅
原型验证、嵌入式设备、内部小工具这类轻量场景,Cpp-httplib 基本是最省心的选择,include 一个头文件就开干。但如果你要的是高并发网关、长连接推送或 HTTP/2 这类重头戏,它就不合适了——那种需求请直接换框架。
项目里 example 示例目录 覆盖了服务器、客户端、上传、SSE、WebSocket 等常见用例,README 则把 SSL 后端、流式、压缩这些进阶项讲得更细,照着抄就行。
【免费下载链接】cpp-httplibA C++ header-only HTTP/HTTPS server and client library项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考