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

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍cpp-httplib HTTP协议库配置与使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :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即可。

# 编译
g++ -o server server.cpp -lpthread
g++ -o client client.cpp -lpthread

😆3. 使用说明

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

// 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;
}
// 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;
}

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/275703.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python入门学习篇(十一)——函数注释函数嵌套全局变量与局部变量

1 函数注释 1.1 使用说明 第一步 在函数体里面输入三个""" 第二步 回车1.2 示例代码 def quotient(divisor,dividend):""":param divisor: 除数:param dividend: 被除数:return: 商"""return divisor/dividendnum1int(input(&…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

律师卷宗档案保存期限多久?律师档案卷宗如何整理?

律师卷宗档案的保存期限可以根据不同法律和法规进行调整&#xff0c;因此可能会有所不同。一般来说&#xff0c;律师卷宗档案的保存期限通常为10年以上。然而&#xff0c;具体的保存期限还会受到当地司法体系和律师协会规定的影响。建议您咨询所在地的律师协会或相关法律机构&a…

AGV智能搬运机器人-替代人工工位让物流行业降本增效

在当今快速发展的世界中&#xff0c;物流业面临着巨大的挑战&#xff0c;包括提高效率、降低成本和优化工作流程。为了应对这些挑战&#xff0c;一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…

【2023】通过docker安装hadoop以及常见报错

&#x1f4bb;目录 1、准备2、安装镜像2.1、创建centos-ssh的镜像2.2、创建hadoop的镜像 3、配置ssh网络3.1、搭建同一网段的网络3.2、配置host实现互相之间可以免密登陆3.3、查看是否成功 4、安装配置Hadoop4.1、添加存储文件夹4.2、添加指定配置4.3、同步数据 5、测试启动5.1…

openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例

文章目录 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例175.1 相同表的INSERT和DELETE并发175.2 相同表的并发INSERT175.3 相同表的并发UPDATE175.4 数据导入和查询的并发 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入…

【新版Hi3536AV100性能果真强悍】

Hi3536AV100是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;智能NVR产品应用开发的新一代专业高端SoC芯片。 Hi3536AV100集成了ARM Cortex-A55八核处理器和性能强大的神经网络处理器&#xff0c;支持多种智能算法应用。 Hi3536AV100支持32路1080p多协议解码及4路…

js中深拷贝与浅拷贝的区别?如何实现一个深拷贝?(收藏好,用时好找)

文章目录 一、数据类型存储二、浅拷贝Object.assignslice()concat()拓展运算符 三、深拷贝_.cloneDeep()jQuery.extend()JSON.stringify()循环递归 四、区别小结 一、数据类型存储 前面文章我们讲到&#xff0c;JavaScript中存在两大数据类型&#xff1a; 基本类型引用类型 …

CorelCAD各版本安装指南

下载链接 https://pan.baidu.com/s/1v0VgYRaaRRUeAgJC__0rPw?pwd0531 1.鼠标右击【CorelCAD2023(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 CorelCAD2023(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【CorelCA…

Mybatis行为配置之Ⅱ—结果相关配置项说明

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL 文章目录 专栏精选引言摘要正文autoMappingBehaviorautoMappingU…

打开相机失败 出现错误的原因

如何解决&#xff1f; Debug中缺少DLL文件 以下参考周姐文档 相机调用步骤 学习相机第三方库的安装 https://blog.csdn.net/Qingshan_z/article/details/117257136书签&#xff1a;QT添加库&#xff08;静态库和动态库&#xff09;_Qingshan_z的博客-CSDN博客_qt添加库 添加文…

开发知识点-Weblogic

Weblogic 介绍CVE_2018_2628poc-yaml-weblogic-ssrfpoc-yaml-weblogic-cve-2017-10271poc-yaml-weblogic-cve-2019-2725poc-yaml-weblogic-cve-2019-2729-1poc-yaml-weblogic-cve-2019-2729-2poc-yaml-weblogic-cve-2020-14750poc-yaml-weblogic-local-cve-2022-21371-file-inc…

修改jenkins的目录(JENKINS_HOME)

默认JENKINS_HOME是/var/lib/jenkins/ 现要修改为/home/jenkins_data/jenkins 最开始 sudo cp -a /var/lib/jenkins/ /home/jenkins_data/ 然后如下操作&#xff1a; 1、首先 /etc/sysconfig/jenkins&#xff1a;jenkins配置文件&#xff0c;“端口”&#xff0c;“JENKIN…

数字 IC 笔试易混淆整理

signed 扩展 比较以下4段代码&#xff0c;给出W_DATA2的结果&#xff08;十进制或16进制或二进制&#xff09;&#xff1b; wire signed [3:0] W_DATA1 4b1000; wire signed [7:0] W_DATA2; assign W_DATA2 W_DATA1; wire [3:0] W_DATA1 4b1000; wire signed [7:0] W_DA…

JPEG的操作模式和数据

JPEG&#xff08;Joint Photographic Experts Group&#xff09;是一种广泛应用于图像压缩领域的标准。JPEG的操作模式和数据结构是实现图像压缩和解压缩的重要组成部分。本文将详细介绍JPEG的操作模式和数据结构&#xff0c;以及其在图像处理中的应用。 JPEG的操作模式主要包…

Jest 测试框架快速上手

目录 一、Jest 是什么 二、Jest 开始使用步骤 1. 初始化一个新的项目 2. 安装 3. 创建测试文件并编写测试用例 4. 运行测试 三、单元测试框架基本原理 1. test 2. expect 3. toBe 匹配器 四、匹配器及适用范围 1. 普通匹配器 2. 与真假有关的匹配器 3. 数字 4. …

搭建FTP服务器详细介绍

一.FTP简介 &#xff11;.&#xff11;什么是FTP &#xff11;.&#xff12;FTP服务器介绍 &#xff11;.&#xff13;FTP服务器优缺点 二.FTP服务器的搭建与配置 2.1 开启防火墙 2.2创建组 2.3创建用户 2.4安装FTP服务器 2.5配置FTP服务器 &#xff12;.&#xff…

Redis中RDB和AOF

Redis中RDB和AOF 定时间间隔执行数据集的时间快照&#xff0c;把某一时刻数据和妆容以文件的形式写到磁盘上&#xff0c;也就是快照。 配置文件 如果是普通安装方式可以跳过&#xff0c;如果是docker安装&#xff0c;需要到官网下载redis.conf配置文件到本地&#xff0c;地址…

YOLOv7+Pose姿态估计+tensort部署加速

YOLOv7是一种基于深度学习的目标检测算法&#xff0c;它能够在图像中准确识别出不同目标的位置和分类。而姿态估计pose和tensort则是一种用于实现人体姿态估计的算法&#xff0c;可以对人体的关节位置和方向进行精准的检测和跟踪。 下面我将分点阐述YOLOv7姿态估计posetensort…

浏览器的插件作用、安装与使用介绍

浏览器的插件作用、安装与使用介绍 网页插件是一种为了增强浏览器功能而设计的软件程序。它们可以在浏览器中添加额外的功能、工具或服务&#xff0c;以满足用户个性化的需求。网页插件通常以浏览器扩展、附加组件或插件的形式存在&#xff0c;可以在浏览器的插件商店中找到并安…