【C++】开源:cpp-httplib HTTP协议库配置与使用

😏★,° :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍cpp-httplib HTTP协议库配置与使用。
无专精则不能成,无涉猎则不能通。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. 项目介绍](#:smirk:1. 项目介绍)
    • [:blush:2. 环境配置](#:blush:2. 环境配置)
    • [:satisfied:3. 使用说明](#:satisfied:3. 使用说明)

😏1. 项目介绍

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

cpp-httplib是一个C++编写的开源HTTP客户端/服务器库,用于处理HTTP请求和响应。它提供了简单易用的接口和功能,使开发者能够轻松地构建基于HTTP协议的应用程序。

以下是cpp-httplib的一些关键特点和功能:

1.轻量级:cpp-httplib是一个轻量级的库,仅依赖于C++标准库,无需安装额外的依赖项。
2.简单易用的接口:cpp-httplib提供了简单直观的接口,使开发者能够方便地处理HTTP请求和响应。您可以轻松地创建服务器、处理路由、读取请求参数、设置响应头等。
3.客户端功能:cpp-httplib可以用作HTTP客户端,发送HTTP请求并接收响应。您可以设置请求头、请求参数、处理响应数据等。
4.SSL/TLS支持:cpp-httplib支持通过SSL/TLS进行安全的HTTP通信。您可以使用HTTPS协议进行加密通信,确保数据传输的安全性。
5.静态文件服务器:cpp-httplib提供了静态文件服务器的功能,可以轻松地将静态文件(如HTML、CSS、JavaScript、图像等)提供给客户端。
6.跨平台支持:cpp-httplib可在多个平台上运行,包括Windows、Linux和macOS等。

cpp-httplib是一个简单而功能丰富的C++ HTTP库,适用于构建各种基于HTTP协议的应用程序,如Web服务器、RESTful API、HTTP客户端等。

😊2. 环境配置

cpp-httplib是一个单头文件的c++库,因此在项目中只有加入该头文件httplib.h即可。

bash 复制代码
# 编译
g++ -o server server.cpp -lpthread
g++ -o client client.cpp -lpthread

😆3. 使用说明

HTTP请求/响应服务端和客户端示例:

cpp 复制代码
// server.cpp
#include <iostream>
#include "httplib.h"

void handle_post(const httplib::Request& req, httplib::Response& res) {
    // 获取请求体数据
    std::string body = req.body;

    // 在服务器端打印请求体数据
    std::cout << "Received POST request with body: " << body << std::endl;

    // 设置响应内容
    res.set_content("POST request received", "application/json");
}

int main() {
    httplib::Server svr;

    svr.Get("/", [](const httplib::Request& req, httplib::Response& res) {
        res.set_content("Hello, World!", "text/plain");
    });

    svr.Get("/about", [](const httplib::Request& req, httplib::Response& res) {
        res.set_content("About page", "text/plain");
    });

    svr.Post("/api/users", handle_post);

    std::cout << "Server started on port 8080" << std::endl;
    svr.listen("localhost", 8080);

    return 0;
}
cpp 复制代码
// client.cpp
#include <iostream>
#include "httplib.h"

int main() {
    httplib::Client cli("localhost", 8080);

    // 发送GET请求
    auto res = cli.Get("/");
    if (res && res->status == 200) {
        std::cout << res->body << std::endl;
    }

    res = cli.Get("/about");
    if (res && res->status == 200) {
        std::cout << res->body << std::endl;
    }

    // 发送POST请求
    httplib::Headers headers = {
        { "Content-Type", "application/json" }  // 设置请求头 MIME类型
    };

    std::string body = R"({"name": "John", "age": 30})";  // 请求体数据

    auto res2 = cli.Post("/api/users", headers, body, "application/json");

    if (res2 && res2->status == 200) {
        std::cout << "Request successful: " << res2->body << std::endl;
    } else {
        std::cout << "Request failed!" << std::endl;
    }

    return 0;
}

以上。

相关推荐
ShineWinsu12 分钟前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
奈斯先生Vector32 分钟前
OpenScience 安装失败怎么办?Windows 环境、API 配置与本地服务排错指南
人工智能·windows·架构·开源·aigc·midjourney
liulilittle40 分钟前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
skr爱码士1 小时前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt·系统架构·客户端
吃旺旺雪饼的小男孩1 小时前
自动驾驶图像分割开源数据集指南(2026)
人工智能·开源·自动驾驶
deepseek231 小时前
商汤开源SenseNova U1.5 Lite拆解:8B装下原生统一多模态,NEO-Unify架构与4K图像生成的三笔工程账
开源·多模态大模型·ai agent
郝学胜-神的一滴2 小时前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
zzzzzz3103 小时前
react-bits:酷炫组件之外,React 页面表现力真正该怎么借力?
react.js·开源·动效
码匠许师傅10 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试