当前位置: 首页 > news >正文

深入解析:高效轻量的C++ HTTP服务:cpp-httplib使用指南

深入解析:高效轻量的C++ HTTP服务:cpp-httplib使用指南

文章目录

    • httplib介绍与安装
    • 使用案例

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

接口介绍

请求中包含请求方法,请求的资源路径,请求头部,请求正文和查询字符串。

struct Request
{
std::string method;
std::string path;
Headers headers;
std::string body;
Params params;
};

响应中包含HTTP协议版本,响应状态码,响应状态码描述,响应头部,响应正文。

struct Response
{
std::string version;
int status = -1;
std::string reason;
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);
};

服务器句柄,通过GET/POST/PUT/DELETE函数处理对应的HTTP请求,设置请求路径和对应的回调函数即可,通过listen函数进行对应端口的监听。

class Server
{
using Handler = std::function<
void(const Request&
, Response&
)>
;
Server &
Get(const std::string &pattern, Handler handler);
Server &
Post(const std::string &pattern, Handler handler);
Server &
Put(const std::string &pattern, Handler handler);
Server &
Delete(const std::string &pattern, Handler handler);
bool listen(const std::string &host, int port);
};

客户端句柄同样也是GET/POST/PUT/DELETE发起对应的请求,参数为请求路径,请求正文和请求的类型。

class Client
{
explicit Client(const std::string &host, int port);
Result Get(const std::string &path, const Headers &headers);
Result Post(const std::string &path, const std::string &body,
const std::string &content_type);
Result Put(const std::string &path, const std::string &body,
const std::string &content_type);
Result Delete(const std::string &path, const std::string &body,
const std::string &content_type);
};

使用案例

main.cc

#include "../common/httplib.h"
#include <iostream>int main(){httplib::Server server;// using Handler = std::function<void(const Request &, Response &)>;server.Get("/hello",[](const httplib::Request & req, httplib::Response & resp){std::cout <<"method: " << req.method << std::endl;std::cout <<"path: " << req.path << std::endl;
std::string body = "<html><body><h1>Hello World</h1></body></html>";resp.set_content(body,"text/html");resp.status = 200;});server.listen("0.0.0.0",8080);return 0;}

makefile

main:main.cc
g++ -o $@ $^ -std=c++17 -lpthread
.PHONY:clean
clean:
rm -rf main
makefile
```makefile
main:main.cc
g++ -o $@ $^ -std=c++17 -lpthread
.PHONY:clean
clean:
rm -rf main

image-20250214203709570

http://www.sczhlp.com/news/4740/

相关文章:

  • 28天
  • AI给老码农的小小震撼:PB/PE分位计算
  • VS2015+ Qt5.9.1 内嵌CEF 环境配置
  • Atom编辑器离线中文设置
  • 2025牛客暑期多校训练营5 K.Perfect Journey
  • 8月3日总结
  • 通过自定义聚合增强 Kubernetes Event 管理
  • 2025 -- 云智计划 -- 【CSP-S】模拟赛 #910_总结+题解
  • 详细介绍:设计模式:访问者模式 Visitor
  • Misaka2298的OI零碎知识点 / Trick
  • 原地变配与快照变配
  • Misaka2298的OI错误集
  • 【Tryhackme】Soupedecode 01 域控渗透
  • 计算PE和PB历史分位的尝试(失败)
  • 软考系统分析师每日学习卡 | [日期:2025-08-03] | [今日主题:段页式存储]
  • Buildroot挂载网络内核和根文件系统
  • 8.3总结
  • 8月3号
  • 云原生环境中的镜像兼容性(NFD项目)
  • 【自学嵌入式:51单片机】实现DS18B20温度报警器
  • 2025.8.3
  • docker下载安装
  • NOIP0805模拟赛题解
  • Weblogic-CVE-2018-2894
  • plink软件 二分类 logistic GWAS分析中 P值为NA
  • 深度解析Manus:从多智能体架构到通用AI Agent的技术革命 - 实践
  • 基于 PyTorch 动手实现 LLM
  • vanna chat2db db-gpt
  • Docker安装Nacos
  • C++14新特性个人总结