C++11 http服务端和客户端库cpp-httplib

C++11 http服务端和客户端库cpp-httplib

环境:

复制代码
http: yhirose/cpp-httplib v0.18.1
json: nlohmann/json v3.11.3

1. 简介

cpp-httplib 是一个轻量级且易于使用的 C++11 HTTP 库,由 yhirose 开发和维护,开源协议为MIT。它支持 HTTP/HTTPS 协议,可用于创建简单的客户端和服务器应用程序。

主要特性:

  • 支持 Windows、macOS 和 Linux等操作系统
  • 支持 HTTP/1.1 和 HTTPS 协议
  • 支持 GET、POST、PUT、DELETE 等 HTTP 方法
  • 支持文件上传和下载
  • 支持自定义响应头和请求头
  • 支持压缩和解压缩(如 gzip)
  • 支持路由功能,可以匹配和处理不同的 URL 路径

项目仓库地址:https://github.com/yhirose/cpp-httplib

2. http服务端代码

main.cpp

复制代码
#include "httplib.h"
#include "json.hpp"

#include <iostream>

using namespace httplib;
using json = nlohmann::json;

int main()
{
    Server httpServer;

    // /test
    httpServer.Get("/test",
                   [](const Request &req, Response &res)
                   {
                       json response = json::parse(R"({"code":0,"message":"success","data":[1,2,3]})");
                       res.set_content(response.dump(), "application/json");
                   });

    // /user/:username
    httpServer.Post("/user/:username",
                    [](const Request &req, Response &res)
                    {
                        auto username = req.path_params.at("username");

                        json response = {{"code", 0}, {"message", "success"}, {"data", {{"username", username}}}};
                        res.set_content(response.dump(), "application/json");
                    });

    // /exit
    httpServer.Get("/exit",
                   [&](const Request &req, Response &res)
                   {
                       httpServer.stop();
                   });

    std::cout << "http://0.0.0.0:8080" << std::endl;
    std::cout << "GET  /test" << std::endl;
    std::cout << "POST /user/:username" << std::endl;
    std::cout << "GET  /exit" << std::endl;
    httpServer.listen("0.0.0.0", 8080);

    return 0;
}

CMakeLists.txt

复制代码
cmake_minimum_required(VERSION 3.11)

project(main)

add_executable( ${PROJECT_NAME} main.cpp json.hpp httplib.h)
相关推荐
All for pursuit.1 分钟前
【数组-5】560.和为K的子数组
数据结构·c++·算法·leetcode
影视飓风TIM2 分钟前
C++异常与RAII智能指针笔记
开发语言·c++·笔记
欧特克_Glodon2 分钟前
OpenCV计算机视觉开发入门与实践<四十二>:手势识别
c++·人工智能·opencv·计算机视觉·手势识别
Chengbei113 分钟前
红队新工具 ToShell 解析:自带 Web 控制台,AES+SM4 国密加密,载荷随机免杀,自主 Agent 自动完成渗透任务
人工智能·tcp/ip·安全·web安全·http·网络安全·系统安全
草莓熊Lotso7 分钟前
【Redis 初阶】C++ 客户端实战:从 RESP 协议到 redis-plus-plus 工程化用法
linux·开发语言·网络·数据库·c++·redis·缓存
郝学胜-神的一滴12 分钟前
C++11 工程级应用 10:减少拷贝,让容器跑得更快
服务器·开发语言·c++·游戏引擎·opengl
川石课堂软件测试33 分钟前
涨薪技术|Prometheus之HTTP API中使用PromQL
网络协议·测试工具·jmeter·http·单元测试·postman·prometheus
估值探索者1 小时前
【AI+量化实战 #05】财报季的信息洪流:用LLM给业绩预告分类+算事件窗口收益
java·c语言·c++·人工智能·python·分类·数据挖掘
Zixhy3 小时前
手撕Reactor模型实现同步高并发服务器及Muduo网络库深入解析
linux·服务器·网络·数据库·c++
码匠许师傅10 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml