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

cpp-httplib 框架

cpp-httplib

概述

主要特点

  • 单文件库cpp-httplib 是一个单文件头文件库,易于集成到现有项目中。你只需将 httplib.h 包含到项目中即可开始使用
  • 支持 HTTP 客户端和服务器:它不仅支持作为 HTTP 客户端发送请求,也支持构建 HTTP 服务器处理客户端请求
  • 支持 HTTPS:通过 OpenSSL 库,可以支持 HTTPS 请求
  • 易于使用:API 简单直观,适合快速开发和集成
  • 异步支持:虽然主要是同步的,但它也支持异步 HTTP 请求
  • 依赖性少:该库没有大量外部依赖,使用起来非常轻量
  • 适合小型项目:尤其适合嵌入式系统、微服务、以及快速构建 HTTP 服务的场景

主要功能

  • HTTP 客户端功能:支持发送 GET、POST、PUT、DELETE 等 HTTP 请求,并处理响应数据
  • HTTP 服务器功能:能够快速搭建简单的 HTTP 服务器,处理不同的 HTTP 请求(如 GET、POST、PUT 等)
  • 支持 HTTPS:通过集成 OpenSSL 支持安全的 HTTPS 请求
  • 多种响应类型:支持返回字符串、文件、JSON 数据等多种类型的响应
  • 处理 URL 参数和表单数据:可以轻松处理 GET 请求中的查询参数,POST 请求中的表单数据
  • 支持自定义请求头:可以轻松地为请求添加自定义头部

快速上手

服务器搭建

#include "../../common/httplib.h"
#include <iostream>int main() {// 实例化服务器对象httplib::Server server;// 注册回调函数server.Get("/hi", [](const httplib::Request &req, httplib::Response &rsp) {// 打印请求的基本信息std::cout << "Method: " << req.method << std::endl;std::cout << "Path: " << req.path << std::endl;// 打印请求头信息for (const auto &it : req.headers) {std::cout << it.first << ": " << it.second << std::endl;}// 返回响应内容std::string body = "<html><body><h1>Hello httplib></h1></body></html>";rsp.set_content(body, "text/html");});// 启动服务器std::cout << "Server is running at http://0.0.0.0:8888" << std::endl;server.listen("0.0.0.0", 8888);return 0;
}

客户端搭建

#include "httplib.h"
#include <iostream>int main() {// 创建一个 HTTP 客户端对象,连接到指定的服务器httplib::Client cli("http://www.example.com");// 发起 GET 请求并获取响应auto res = cli.Get("/");if (res && res->status == 200) {std::cout << "Response: " << res->body << std::endl;} else {std::cout << "Request failed." << std::endl;}return 0;
}

常用接口

HTTP客户端接口

httplib::Client

httplib::Client(const std::string &host, int port = 80);

GET请求

获取指定路径的数据 

auto res = client.Get("/path");

POST请求

 发送一个POST请求,body是请求体数据,Content-type请求头数据;支持发送JSON、文本等数据

auto res = client.Post("/path", body, "Content-Type: application/json");

PUT请求

一般用于更新资源

auto res = client.Put("/path", body, "Content-Type: application/json");

DELETE请求

auto res = client.Delete("/path");

获取响应

访问响应状态码

int status = res->status;

访问响应体

std::string body = res->body;

访问响应头

std::string content_type = res->get_header_value("Content-Type");

HTTP服务器接口

构造函数

httplib::Server();

定义路由

借助路由方法定义服务器如何处理不同类型的HTTP请求,每一个路由都对应一个HTTP动作

处理GET请求

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

处理POST请求

svr.Post("/submit", [](const httplib::Request& req, httplib::Response& res) {std::string body = req.body;res.set_content("POST received!", "text/plain");
});

处理PUT请求

svr.Put("/update", [](const httplib::Request& req, httplib::Response& res) {res.set_content("PUT request received!", "text/plain");
});

启动服务器

svr.listen("localhost", 8080);

设置响应内容

res.set_content("response body", "text/plain");

获取URL路径参数

svr.Get("/users/{id}", [](const httplib::Request& req, httplib::Response& res) {std::string id = req.matches[1]; // 获取 URL 中的 id 参数res.set_content("User ID: " + id, "text/plain");
});

文件上传与下载

上传文件

std::ifstream file("file.txt", std::ios::binary);
auto res = client.Post("/upload", file, "application/octet-stream");

下载文件

svr.Get("/download", [](const httplib::Request& req, httplib::Response& res) {res.set_content_from_file("file.txt", "text/plain");
});

相关文章:

cpp-httplib 框架

cpp-httplib 概述 主要特点 单文件库&#xff1a;cpp-httplib 是一个单文件头文件库&#xff0c;易于集成到现有项目中。你只需将 httplib.h 包含到项目中即可开始使用支持 HTTP 客户端和服务器&#xff1a;它不仅支持作为 HTTP 客户端发送请求&#xff0c;也支持构建 HTTP 服…...

GEE 案例——TVDI(Temperature Vegetation Dryness Index)指数

目录 简介 方法论 代码解释 函数 案例代码 单景影像的TVDI 影像集合批量计算TVDI 引用 结果 简介 本文中代码包含两个可用于计算 TVDI 的主要函数。其中一个函数用于仅根据一幅 NDVI 和一幅 LST 图像生成 TVDI(singleTVDI),另一个函数用于为多幅 NDVI 和多幅 LST …...

Java语言程序设计 选填题知识点总结

第一章 javac.exe是JDK提供的编译器public static void main (String args[])是Java应用程序主类中正确的main方法Java源文件是由若干个书写形式互相独立的类组成的Java语言的名字是印度尼西亚一个盛产咖啡的岛名Java源文件中可以有一个或多个类Java源文件的扩展名是.java如果…...

基于Springboot+Vue社区养老服务管理系统(源码+lw+讲解部署+PPT)

前言 详细视频演示 论文参考 系统介绍 系统概述 核心功能 用户角色与功能 具体实现截图 1. 服务信息查看功能 主要代码实现 截图&#xff1a; 2. 服务申请功能 主要代码实现 截图&#xff1a; 3. 公告信息查看功能 主要代码实现 截图&#xff1a; 4. 服务信息…...

Linux基本指令的使用

当然可以&#xff01;以下是一些常用的Linux指令及其示例&#xff1a; 1. ls 列出目录内容。 ls 显示当前目录下的文件和文件夹。 ls -l 以详细格式列出文件和文件夹的信息&#xff08;如权限、拥有者、大小等&#xff09;。 2. cd 改变当前目录。 cd /path/to/dire…...

Momenta C++面试题及参考答案

vtable 的创建时机 在 C 中&#xff0c;vtable&#xff08;虚函数表&#xff09;是在编译阶段创建的。当一个类包含虚函数时&#xff0c;编译器会为这个类生成一个 vtable。vtable 本质上是一个函数指针数组&#xff0c;其中每个元素指向一个虚函数的实现。这个表的布局是由编译…...

AI 在软件开发流程中的优势、挑战及应对策略

AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展&#xff0c;AI大模型正在逐步渗透到软件开发的各个环节&#xff0c;从代码自动生成到智能测试&#xff0c;AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势&#xff0…...

langchain runnable

LangChain 文档详细解析 LangChain 是一个用于构建与语言模型&#xff08;如GPT-4&#xff09;交互的框架。本文档介绍了LangChain v0.1版本中的Runnable接口及其相关功能。 目录 Runnable接口输入和输出模式使用示例异步方法事件流并行处理 1. Runnable接口 为了简化自定义…...

nginx配置不缓存资源

方法1 location / {index index.html index.htm;add_header Cache-Control no-cache,no-store;try_files $uri $uri/ /index.html;#include mime.types;if ($request_filename ~* .*\.(htm|html)$) {add_header Cache-Control "private, no-store, no-cache, must-revali…...

Linux系统程序设计--4.进程

程序与进程 内核中的进程结构 task_struct(进程表项和进程控制块) 位于/usr/src/linux-headers-4.15.0-213-generic/include/linux/sched.h C程序启动过程 进程终止方式 进程终止函数 atexit 小案例 #include<stdio.h> #include<string.h> #include<stdlib…...

springboot/ssm网购平台管理系统Java在线购物商城管理平台web电商源码

springboot/ssm网购平台管理系统Java在线购物商城管理平台web电商源码 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&…...

2024年Android面试总结

2024年Android面试总结 1.动画类型有哪些&#xff1f;插值器原理&#xff1f; 2.StringBuffer和StringBuilder区别&#xff1f; 3.jvm内存模型&#xff1f; 4.线程池7大核心参数及原理&#xff1f; 5.Android多进程通信方式有哪些&#xff1f;各自的优缺点&#xff1f; 6…...

UE5 slate BlankProgram独立程序系列

源码版Engine\Source\Programs\中copy BlankProgram文件夹&#xff0c;重命名为ASlateLearning&#xff0c;修改所有文件命名及内部名称。 ASlateLearning.Target.cs // Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool; using System.Collections.Ge…...

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心&#xff0c;里面就有互联互通的全部能力&#xff0c;现在有了小米电脑管家&#xff0c;老款的笔记本竟然用不了&#xff0c;也可以理解&#xff0c;毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁&#xff0c;至于其他品牌的winPC小米…...

家庭智慧工程师:如何通过科技提升家居生活质量

在今天的数字化时代&#xff0c;家居生活已经不再只是简单的“住”的地方。随着物联网&#xff08;IoT&#xff09;、人工智能&#xff08;AI&#xff09;以及自动化技术的快速发展&#xff0c;越来越多的家庭开始拥抱智慧家居技术&#xff0c;将他们的家变得更加智能化、便捷和…...

云计算-华为HCIA-学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第二章&#xff1a;服务器基础 服务器是什么&#xff1f; 服务器本质上就是个性能超强的…...

webgl threejs 云渲染(服务器渲染、后端渲染)解决方案

云渲染和流式传输共享三维模型场景 1、本地无需高端GPU设备即可提供三维项目渲染 云渲染和云流化媒体都可以让3D模型共享变得简单便捷。配备强大GPU的远程服务器早就可以处理密集的处理工作&#xff0c;而专有应用程序&#xff0c;用户也可以从任何个人设备查看全保真模型并与…...

【中间件】Redis

一、什么是Redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperloglogs等数据类型。内置…...

请结合给定资料中的具体事例,谈谈你对“海洋的污染将毁灭鱼儿的家园,但让人类不寒而栗的毁灭绝非仅此而已!”这句话的理解。(10分)

题目 【2010年国考省级以上&#xff08;含副省级&#xff09;申论真题】2&#xff0e;请结合给定资料中的具体事例&#xff0c;谈谈你对“海洋的污染将毁灭鱼儿的家园&#xff0c;但让人类不寒而栗的毁灭绝非仅此而已&#xff01;”这句话的理解。&#xff08;10分&#xff09…...

Java SE 与 Java EE:基础与进阶的探索之旅

在编程世界中&#xff0c;Java语言以其跨平台、面向对象、丰富的类库等特点&#xff0c;成为了众多开发者和企业的首选编程语言。而Java SE与Java EE&#xff0c;作为Java平台的两个重要组成部分&#xff0c;各自承载着不同的使命&#xff0c;同时又紧密相连&#xff0c;共同构…...

PH热榜 | 2024-11-24

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 在线预览 1. AutoFlow Studio 标语&#xff1a;借助简化的AI质检&#xff0c;更快发布产品&#xff0c;更聪明地进行测试。 介绍&…...

LLM 系列学习教程

LLM101 检查 Tokenizer 词表大小与 LLM 的 Embedding 和 LM_head 输入大小是否匹配对 SBert 进行训练、预测、评估使其进行相似度计算对 BERT 进行训练、预测、评估使其进行文本分类使用 CLIP 模型进行文本图像匹配对 JoinBERT 进行训练、预测使其进行对话意图和槽位联合识别对…...

基于yolov8、yolov5的茶叶等级检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;茶叶等级检测在茶叶生产、质量控制和市场销售中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监测茶叶质量&#xff0c;还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的茶叶等级检测模型&#xff0c;该模…...

Excel求和如何过滤错误值

一、问题的提出 平时&#xff0c;我们在使用Excel时&#xff0c;最常用的功能就是求和了&#xff0c;一说到求和你可能想到用sum函数&#xff0c;但是如果sum的求和区域有#value #Div等错误值怎么办&#xff1f;如下图&#xff0c;记算C列中工资的总和。 直接用肯定会报错&…...

头文件包含

大家好&#xff0c;今天我们来聊聊头文件包含这方面的知识&#xff0c;并且在这里提出几个问题&#xff0c;头文件多次包含有什么影响吗&#xff1f;“”和〈〉这两种方式都能包含标准头文件吗&#xff1f; 一.文件包含 #include指令可以使另外一个文件被编译。就像它实际出现…...

37_U-Net网络详解

1.U-Net 网络概述 U-Net 是一种深度学习模型&#xff0c;广泛用于图像的语义分割任务。U-Net 网络的结构特别适合医学影像分割&#xff0c;尤其在少量训练数据的情况下表现优异。该网络由一个编码器-解码器架构组成&#xff0c;具有对称的“U”形结构&#xff0c;因此得名为 U…...

fastapi入门

好的&#xff0c;我将为您生成一个更详细、易于理解的 FastAPI 入门学习文档&#xff0c;特别是对复杂概念&#xff08;如依赖注入&#xff09;进行深入解释&#xff0c;帮助您在没有太多基础的情况下也能顺利学习和掌握 FastAPI。 FastAPI 入门学习文档 目录 简介环境搭建 2…...

RabbitMQ 之 死信队列

一、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 queue 取出消息进行…...

Android-如何实现Apng动画播放

01 Apng是什么 Apng&#xff08;Animated Portable Network Graphics&#xff09;顾名思义是基于 PNG 格式扩展的一种动画格式&#xff0c;增加了对动画图像的支持&#xff0c;同时加入了 24 位图像和8位 Alpha 透明度的支持&#xff0c;并且向下兼容 PNG。 Google封面图 02 A…...

微服务系统架构图

微服务架构是一种将单一应用程序开发为一组小型服务的架构风格。每个服务都在自己的进程中运行&#xff0c;它们之间采用轻量级的通信机制&#xff08;如 HTTP/REST 或消息队列&#xff09;进行相互协作。以下是关于微服务系统架构的简要介绍&#xff1a;一、核心特点独立部署 …...

04 —— Webpack打包CSS代码

加载器css-loader &#xff1a;解析css代码 webpack 中文文档 | webpack中文文档 | webpack中文网 加载器style-loader&#xff1a;把解析后的css代码插入到DOM style-loader | webpack 中文文档 | webpack中文文档 | webpack中文网 准备css代码&#xff0c;放到src/login目…...

【数据结构专栏】二叉搜索树(Binary Search Tree)的剖析?

文章目录 &#x1f9e8;前言1、二叉搜索树的基本概念&#xff1f;2、二叉搜索树的节点结构组成&#xff1f;3、二叉搜索树的插入操作&#xff1f;4、二叉搜索树的删除操作&#xff1f;5、二叉搜索树的遍历&#xff1f; 6、二叉搜索树的性能分析&#xff1f; &#x1f389;完整代…...

SSM全家桶 1.Maven

或许总要彻彻底底地绝望一次 才能重新再活一次 —— 24.11.20 maven在如今的idea中已经实现自动配置&#xff0c;不需要我们手动下载 一、Maven的简介和快速入门 Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件)&#xff0c;使用 Maven 可以自动化构建测试、打包和发…...

前端三剑客(二):CSS

目录 1. CSS 基础 1.1 什么是 CSS 1.2 语法格式 1.3 引入方式 1.3.1 行内样式 1.3.2 内部样式 1.3.3 外部样式 1.4 CSS 编码规范 2. 选择器 2.1 标签选择器 2.2 id 选择器 2.3 class 选择器(类选择器) 2.4 复合选择器 2.5 通配符选择器 3. 常用 CSS 样式 3.1 c…...

解析html将表格插入word文档

用到依赖包 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.2</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweav…...

Java核心知识详解:String类、StringBuffer、数组及日期时间的全面解析

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 标题 Java核心知识详解&#xff1a;String类、StringBuffer、数组及日期时间的全面解析 摘要 在Java中…...

唯一设备序列号(UID)、唯一产品识别码(UPI)和备份寄存器BKP

文章目录 一、唯一设备序列号UID二、唯一产品识别码UPI三、备份寄存器BKP 一、唯一设备序列号UID MCU 系列产品内置两个不同长度的唯一设备序列号&#xff0c;分别为 96 位的 UID(Unique device ID)和 128 位的UCID(Unique Customer ID)&#xff0c;这两个设备序列号存放在闪存…...

Kafka - 消费者程序仅消费一半分区消息的问题

1. 问题描述 修改安全服务状态有时逻辑正常有时候逻辑不正常&#xff0c;排查incident服务的日志发现消息可以正常发送到 kafka topic &#xff0c;但是incident-cron 服务有时候有拉取消息的日志有时候没有日志。 kafka 生产者可以将消息正常发送到 kafka topic &#xff0c…...

养老院管理系统+小程序项目需求分析文档

智慧综合养老服务平台是以业务为牵引、场景为驱动&#xff0c;围绕“老人”业务域&#xff0c;持续沉淀和打磨形成适应不同养老业务发展需要的业务能力&#xff0c;推动业务模式升级&#xff0c;为养老服务提供数字化解决方案&#xff0c;并依托实体站点与养老机构实现线上线下…...

K8s 下通过prometheus监控 nginx

k8s 下有两个版本的nginx ingress 分别是 ingress nginx 以及 nginx ingress Ingress-nginx 与 Nginx-ingress - LeoZhanggg - 博客园 这里我讨论的是 nginx ingress Nginx Ingress 使用Prometheus 导出数据 nginx ingress 本身支持通过支持这个提供prometheus 格式的…...

基于SpringBoot的京东绿谷旅游信息服务平台设计与实现(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

使用Redis生成全局唯一id

为了生成一个符合要求的分布式全局ID&#xff0c;我们可以使用 StringRedisTemplate 来实现。这个ID由三部分组成&#xff1a; 符号位&#xff08;1 bit&#xff09;&#xff1a;始终为0&#xff0c;表示正数。时间戳&#xff08;31 bit&#xff09;&#xff1a;表示从某个起始…...

pytorch自定义算子导出onnx

文章目录 1、为什么要自定义算子&#xff1f;2、如何自定义算子3、自定义算子导出onnx4、example1、重写一个pytorch 自定义算子&#xff08;实现自定义激活函数&#xff09;2、现有算子上封装pytorch 自定义算子&#xff08;实现动态放大超分辨率模型&#xff09; 1、为什么要…...

从搭建uni-app+vue3工程开始

技术栈 uni-app、vue3、typescript、vite、sass、uview-plus、pinia、axios 一、项目搭建 1、创建以 typescript 开发的工程 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project2、安装sass npm install -D sass// 安装sass-loader&#xff0c;注意需要版本10&…...

波点音乐自动点击

波点音乐 import uiautomator2 as u2 import time import sys import os# 动态点击时间&#xff0c;打印剩余时间 def dynamic_sleep(seconds):wait_time secondsfor i in range(wait_time):print(f"Waiting... {wait_time - i} seconds remaining")sys.stdout.flu…...

【一篇搞定配置】wget 下载与安装(Window)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…...

2025年春招修订版《C/C++笔面试系列》(1) C语言经典笔面试题(上)

C语言是嵌入式开发的常用语言&#xff0c;也是主要语言&#xff0c;很多企业在招聘嵌入式软件工程师时&#xff0c;C语言的熟练程度是一个重要考察点。笔试也是以C语言为主&#xff0c;所以想要拿到面试机会&#xff0c;还得通过C语言笔试&#xff0c;本专题总结了各大企业C语言…...

【042C】基于51RFID门禁系统(LCD12864显示)【Proteus仿真+Keil程序+报告+原理图】

☆、设计硬件组成&#xff1a;51单片机最小系统RFID读卡器4*4矩阵键盘AT24C02存储芯片LCD12864液晶显示继电器蜂鸣器LED灯。 1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片&#xff0c;采用LCD12864液晶显示屏实时显示门禁系统&#xff1b; 2、系统集成两种解锁方式&am…...

scratch二次开发:blockly工作区垃圾桶和进度条的隐藏和显示

大家好&#xff0c;我是小黄。 本期给大家介绍的内容是实现blockly工作区的垃圾桶和进度条的显示和隐藏实现。 本次基于的项目源码大家可以关注小黄回复垃圾桶自行获取。 一.垃圾桶的显示和实现。 在blockly中&#xff0c;我们进行块的删除的时候最常用的两种方法是&#xf…...

【STM32】MPU6050初始化常用寄存器说明及示例代码

一、MPU6050常用配置寄存器 1、电源管理寄存器1&#xff08; PWR_MGMT_1 &#xff09; 此寄存器允许用户配置电源模式和时钟源。 DEVICE_RESET &#xff1a;用于控制复位的比特位。设置为1时复位 MPU6050&#xff0c;内部寄存器恢复为默认值&#xff0c;复位结束…...