跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

cpp-httplib 轻量级 C++ HTTP 库介绍与使用

轻量级 C++ HTTP 库 cpp-httplib 的特点、安装方法及基本使用。该库无需外部依赖,支持同步异步操作及 HTTPS。文中展示了核心类结构及一个简单的服务器搭建示例,包含 GET 请求处理、响应设置及编译配置。

RedisGeek发布于 2026/3/24更新于 2026/10/20100 浏览
cpp-httplib 轻量级 C++ HTTP 库介绍与使用

cpp-httplib 介绍与安装

C++ HTTP 库(cpp-httplib)是一个轻量级的 C++ HTTP 客户端/服务器库,它提供了简单的 API 来创建 HTTP 服务器和客户端,支持同步和异步操作。

以下是一些关于 cpp-httplib 的主要特点:

  1. 轻量级:cpp-httplib 的设计目标是简单和轻量,只需要一个头文件包含即可,不依赖于任何外部库。
  2. 跨平台:它支持多种操作系统,包括 Windows、Linux 和 macOS。
  3. 同步和异步操作:库提供了同步和异步两种操作方式,允许开发者根据需要选择。
  4. 支持 HTTP/1.1:它实现了 HTTP/1.1 协议,包括持久连接和管道化。
  5. Multipart form-data:支持发送和接收 multipart/form-data 类型的请求,这对于文件上传非常有用。
  6. SSL/TLS 支持:通过使用 OpenSSL 或 mbedTLS 库,cpp-httplib 支持 HTTPS 和 WSS。
  7. 简单易用:API 设计简洁,易于学习和使用。
  8. 性能:尽管是轻量级库,但性能表现良好,适合多种应用场景。
  9. 社区活跃:cpp-httplib 有一个活跃的社区,不断有新的功能和改进被加入。

安装非常简单,只需要以下命令:

git clone https://github.com/yhirose/cpp-httplib.git 

cpp-httplib 使用

下图是 cpp-httplib 的回调处理流程,核心是用一个哈希表来记录不同规则对于的 <正则表达式,回调函数> 的关系!

比如下图我们在 GET 规则中添加了 /hi 和其对应回调函数 HelloWorld,当我们去访问 http://ip 地址:端口/hi 的时候,服务器就会执行该回调函数 HelloWorld 将对应的响应填充然后进行返回!

下面介绍以下这个 http 库中的类和接口:

namespace httplib {
// 请求数据结构,封装 HTTP 请求信息
struct Request {
    std::string method; // 请求方法 (如 GET, POST, PUT, DELETE)
    std::string path;   // 请求的路径
    Headers headers;    // 请求头
    std::string body;   // 请求体内容
    Params params;      // 请求参数
};

// 响应数据结构,封装 HTTP 响应信息
struct Response {
    std::string version; // HTTP 版本 (如 "HTTP/1.1")
    int status = -1;     // HTTP 响应状态码 (如 200, 404, 500)
    std::string reason;  // 响应状态说明 (如 "OK", "Not Found")
    Headers headers;     // 响应头
    std::string body;    // 响应体内容

    // 设置响应体内容以及内容类型
    void set_content(const std::string &s, const std::string &content_type);
    // 设置响应头
    void set_header(const std::string &key, const std::string &val);
};

// 服务器类,处理客户端请求
class Server {
public:
    // 请求处理器类型,接收请求并返回响应
    using Handler = std::function<void(const Request &, Response &)>;

    // 注册 GET 请求处理函数
    Server &Get(const std::string &pattern, Handler handler);
    // 注册 POST 请求处理函数
    Server &Post(const std::string &pattern, Handler handler);
    // 注册 PUT 请求处理函数
    Server &Put(const std::string &pattern, Handler handler);
    // 注册 DELETE 请求处理函数
    Server &Delete(const std::string &pattern, Handler handler);

    // 启动服务器并监听指定的主机和端口
    bool listen(const std::string &host, int port);
};

// 客户端类,发起 HTTP 请求
class Client {
public:
    // 构造函数,指定主机和端口
    explicit Client(const std::string &host, int port);

    // 发起 GET 请求
    Result Get(const std::string &path, const Headers &headers);
    // 发起 POST 请求
    Result Post(const std::string &path, const std::string &body, const std::string &content_type);
    // 发起 PUT 请求
    Result Put(const std::string &path, const std::string &body, const std::string &content_type);
    // 发起 DELETE 请求
    Result Delete(const std::string &path, const std::string &body, const std::string &content_type);
};
}

测试样例

按照上面提到的服务器搭建流程,我们写一个测试样例:

#include "../header/httplib.h"

int main() {
    // 1. 实例化服务器对象
    httplib::Server server;

    // 2. 注册回调函数 void(const httplib::Request &, httplib::Response &)
    server.Get("/hi", [](const httplib::Request &req, httplib::Response &rsp) {
        std::cout << req.method << std::endl;
        std::cout << req.path << std::endl;
        for (auto it : req.headers) {
            std::cout << it.first << ": " << it.second << std::endl;
        }
        std::string body = "<html><body><h1>Hello lirendada!</h1></body></html>";
        rsp.set_content(body, "text/html");
        rsp.status = 200;
    });

    // 3. 启动服务器
    server.listen("0.0.0.0", 8080);
    return 0;
}

Makefile 文件:

main : main.cc
g++ -std=c++17 $^ -o $@ -lpthread 

目录

  1. cpp-httplib 介绍与安装
  2. cpp-httplib 使用
  3. 测试样例

更多推荐文章

查看全部
  • DCU BW1000 环境下 llama.cpp 推理 Qwen3-Coder-30B 实践与问题排查
  • 低延迟高并发 EasyDSS 无人机 RTMP 高清推流直播技术剖析
  • Eclipse代码提示功能设置(Java & C/C++)
  • node-llama-cpp 跨平台安装与配置实战
  • Vue 组件枚举值验证实战:从 Type 属性错误说起
  • OpenClaw 与主流 AI 编程工具的本质差异解析
  • Claude-Mem:为 Claude Code 构建跨会话长期记忆
  • MixAIHub 提供 ChatGPT Claude Sora 等 AI 官网镜像服务
  • FPGA Libero SoC 2024.2 安装与工程实战指南
  • Stable Diffusion 扩散模型原理与 PyTorch 实现
  • Flutter for OpenHarmony 集成 dart_openai 实现 AIGC 功能
  • 医疗大模型:数据与知识双轮驱动的医学推理与临床决策支持
  • Kotlin 高级技巧与原理解析:Contract、注解及工具库应用
  • 开源无审核限制大型语言模型概述
  • 30dayMakeCppServer:构建高性能C++网络服务器实践
  • Android WebView 版本升级方案详解
  • Trae MySQL MCP 连接失败排查:Windows ENOENT 与认证插件兼容方案
  • MySQL 新增字段但 Java 实体未更新:潜在问题与解决方案
  • Python 创意编程开发环境搭建指南
  • C++ 模板进阶:特化、类型萃取与可变参数

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online