不装任何第三方库也能写 Web 服务:Cpp-httplib 零依赖实战
2026/9/10 14:24:28 网站建设 项目流程

不装任何第三方库也能写 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); }

一条命令编译并运行,多线程记得带-pthreadg++ -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/42id"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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询