HttpRequest请求模块设计与实现(http模块二)

目录

类功能

类定义

类实现

编译测试


类功能

类定义

// HttpRequest请求模块
class HttpRequest
{
public:std::string _method;                                   // 请求方法std::string _path;                                     // 资源路径std::string _version;                                  // 协议版本std::string _body;                                     // 请求正文std::smatch _matches;                                  // 资源路径的正则提取数据std::unordered_map<std::string, std::string> _headers; // 头部字段std::unordered_map<std::string, std::string> _params;  // 查询字符串
public:// 重置请求 -- 每一次请求的到来都要重置上一次请求的数据void ReSet();// 插入头部字段void SetHeader(const std::string &key, const std::string &val);// 判断是否存在指定头部字段bool HasHeader(const std::string &key);// 获取指定头部字段的值std::string GetHeader(std::string &key);// 插入查询字符串void SetParam(const std::string &key, const std::string &val);// 判断是否有某个指定的查询字符串bool HasParam(const std::string &key);// 获取指定的查询字符串std::string GetParam(std::string &key);// 获取正文长度size_t ContentLength();// 判断是否是短链接bool Close();
};

类实现

// HttpRequest请求模块
class HttpRequest
{
public:std::string _method;                                   // 请求方法std::string _path;                                     // 资源路径std::string _version;                                  // 协议版本std::string _body;                                     // 请求正文std::smatch _matches;                                  // 资源路径的正则提取数据std::unordered_map<std::string, std::string> _headers; // 头部字段std::unordered_map<std::string, std::string> _params;  // 查询字符串
public:// 重置请求 -- 每一次请求的到来都要重置上一次请求的数据void ReSet(){_method.clear();_path.clear();_version.clear();_body.clear();std::smatch match; // smatch 内并没有clear的接口,所以使用交换进行清理_matches.swap(match);_headers.clear();_params.clear();}// 插入头部字段void SetHeader(const std::string &key, const std::string &val){_headers.insert(std::make_pair(key, val));}// 判断是否存在指定头部字段bool HasHeader(const std::string &key){auto it = _headers.find(key);if (it == _headers.end())return false;return true;}// 获取指定头部字段的值std::string GetHeader(const std::string &key){auto it = _headers.find(key);if (it == _headers.end())return "";return it->second;}// 插入查询字符串void SetParam(const std::string &key, const std::string &val){_params.insert(std::make_pair(key, val));}// 判断是否有某个指定的查询字符串bool HasParam(const std::string &key){auto it = _params.find(key);if (it == _params.end())return false;return true;}// 获取指定的查询字符串std::string GetParam(const std::string &key){auto it = _params.find(key);if (it == _params.end())return "";return it->second;}// 获取正文长度size_t ContentLength(){   // 下面的字符串肯定是已经被解析放置在_headers内了// Content-Length: 1234\r\nbool ret = HasHeader("Content-Length");if (ret == false)return 0;std::string clen = GetHeader("Content-Length");return std::stol(clen); // 字符转长整型}// 判断是否是短链接bool Close(){// 没有Connection字段,或者有Connection字段但是值是close,则是短链接,否则就是长链接// keep-alive是长链接的意思if (HasHeader("Connection") == true && GetHeader("Connection") == "keep-alive")return true;return false;}
};

编译测试

因为和下一个模块的联动性较强所以,关于编译测试的部分就放在下一篇文章中去了

HttpResponse响应模块设计与实现(http模块三)-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【技术干货】教你如何基于华为昇腾CANN架构快速实现模型推理应用(内含视频教程)

昇腾的AI全软件栈平台、开源框架、CANN、MindSpore、MindX 等工具&#xff0c;可以让开发者实现「统一端边云&#xff0c;全端自动部署」&#xff0c;开启了机器学习开发的新时代&#xff0c;一直被人们寄予厚望。但正因为资源极其丰富&#xff0c;浩如星辰&#xff0c;想要快速…

使用Python进行股票分析(1)

简介 Python具有非常好的数据分析和数据可视化的功能。在本文中&#xff0c;我们将通过使用Python获取股票的闭市价格&#xff0c;并且对股票价格进行分析从而向我们提供买卖股票的依据。 数据获取 需要说明的是在这里我们获取的是美国股票的数据。至于中国股市的数据大家可…

【C语言】左旋字符串(三种实现方式)

题目&#xff1a; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一&#xff1a; 我们画个图分析一下&#xff1a; 基本逻辑&#xff1a; 就是我们每一次旋转之前&#xff0c;我们就取出…

蓝桥杯——web(ECharts)

ECharts 初体验 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><script src"echarts.js">&l…

《JAVA与模式》之观察者模式

系列文章目录 文章目录 系列文章目录前言一、观察者模式的结构二、推模型和拉模型三、JAVA提供的对观察者模式的支持四、怎样使用JAVA对观察者模式的支持前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男…

入门学习Python推荐书籍

. Python作为一门易学易用的编程语言&#xff0c;在近些年得到了越来越多的关注和应用。Python的开发效率极高&#xff0c;语言特性丰富&#xff0c;拓展性强。因此&#xff0c;Python成为了众多IT工程师、科研人员、数据分析师以及爱好者的首选。 那么&#xff0c;对于初学者…

vite项目修改node_modules

问题详情 在使用某个依赖的时候遇到了bug&#xff0c;提交issue后不想一直等待到作者更新版本&#xff0c;所以寻求临时自己解决 问题解决 在node_modules里找到需要修改的依赖&#xff0c;修改想要修改的代码 修改后记得保存 然后在node_modules里找到.vite文件夹&#x…

docker快照备份回滚

1. 安装系统 1.1 vm安装Ubuntu 参考:https://blog.csdn.net/u010308917/article/details/125157774 1.2 其他操作 添加自定义物理卷 –待补充– 1.2.1 查询可用物理卷 fdisk -l 输出如下 Disk /dev/loop0: 73.9 MiB, 77492224 bytes, 151352 sectors Units: sectors of …

耐腐蚀PFA消解管可配四氟回流盖适配海能莱伯泰科全自动石墨消解仪

PFA消解管&#xff0c;也叫PFA消化管、特氟龙消解管、耐高温消解杯等&#xff0c;应用于气相、液相、等离子光谱质谱、原子吸收、原子荧光等化学分析方法的样品前处理&#xff0c;可消解重金属、农残、食品、淤泥、稀土、水产品、有机物等。 PFA消解管 PFA消解管可耐强酸、强碱…

基于单片机的红外测距仪设计

目 录 摘 要 I Abstract II 引 言 1 1 控制系统设计 3 1.1 主控制器选择 3 1.2 项目总体设计 3 2 项目硬件设计 5 2.1 单片机控制模块 5 2.2 测距模块设计 9 2.3 液晶显示模块 10 2.4 报警模块 11 3 项目软件设计 12 3.1 软件开发环境 12 3.2 系统主程序设计 13 3.3 LCD显示程…

Spring Boot 生成与解析Jwt

Spring Boot 生成与解析Jwt Maven依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>生成&解析 package yang;import io.jsonwebtoken.Claims…

收银系统源码-智慧新零售2.0小助手全新升级!

欢迎后台私信&#xff0c;测试体验&#xff01; 新零售助手是智慧新零售系统的移动管理端&#xff0c;尤其针对商户/门店日常经营必不可少的一环。智慧新零售2.0版小助手也进行了全新升级&#xff0c;使用起来更简单&#xff0c;页面更美观。小助手采用微信小程序登陆&#xf…

Git 掌握

目录 一、前言 二、centos安装Git 三、Git基本操作 (1) 创建Git本地仓库 (2) 配置Git (3) 认识工作区&#xff0c;暂存区&#xff0c;版本库 四、添加文件 五、查看.git文件 六、修改文件 七、版本回退 八、撤销修改 (1) 场景一 对于还没有add的代码 (2) 场景二 已…

基于springboot+vue实现民宿管理系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现民宿管理系统演示 摘要 伴随着我国旅游业的快速发展&#xff0c;民宿已成为最受欢迎的住宿方式之一。民宿借助互联网和移动设备的发展&#xff0c;展现出强大的生命力和市场潜力。民宿主要通过各种平台如携程、去哪儿、淘宝等在网络上销售线下住宿服务&a…

模块自动导入

看的短视频&#xff0c;自己试了下&#xff0c;发现挺好用的&#xff1a;模块自动导入【渡一教育】_哔哩哔哩_bilibili 1. 安装插件 npm i unplugin-auto-import 2. 在vite配置文件&#xff08;vite.config.ts&#xff09;中进行配置&#xff0c; 配置完场后&#xff0c;需要重…

ChatGPT原理与应用开发【文末送书-33】

文章目录 ChatGPT原理应用开发开发指南 ChatGPT原理与应用开发【文末送书-33】 ChatGPT ChatGPT 是一款由 OpenAI 开发的大型语言模型聊天机器人&#xff0c;它基于 GPT-3.5 和 ChatGPT 3.5 模型构建&#xff0c;并采用了大量的训练数据进行训练。ChatGPT 能够生成类似人类的文…

MySQL常见的索引类型介绍

我将为您详细讲解 MySQL 中常见的索引类型&#xff0c;以及它们的使用场景、特点、区别和优势。索引是提高数据库查询性能的关键工具&#xff0c;它可以加速数据检索速度&#xff0c;减少服务器的负担。在 MySQL 中&#xff0c;索引类型主要包括 B-Tree 索引、哈希索引、全文索…

从数据处理到3D PDF生成:交互式3D PDF生成引擎HOOPS Publish的工作原理

在当今数字化时代&#xff0c;3D技术在各个行业中扮演着重要角色&#xff0c;从制造业到医疗保健&#xff0c;再到建筑设计。为了更好地共享、演示和交互展示3D模型数据&#xff0c;HOOPS Publish作为一款强大的3D引擎&#xff0c;专门用于生成交互式的3D PDF文件。本文将深入探…

Linux平台下智能入侵检测系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 入侵检测与Snort概述 3 1.1入侵检测系统概念 3 1.2 Snort系统 3 1.3 Snort的特点 3 1.4 Snort规则 4 1.4.1 规则的结构 4 1.4.2 规则头部 5 1.4.3 规则选项 6 1.5 本章小结 6 2 需求分析与总体设计 7 2.1 必要功能需求分析 7 2.2 数据库的…

智能研发新纪元:探索2024年AI辅助研发的发展与趋势

随着人工智能&#xff08;AI&#xff09;技术的高速发展与创新&#xff0c;我们迎来了一个全新的时代&#xff0c;尤其是在研发领域。AI正以前所未有的速度和效率推动着科技的突破。2024年&#xff0c;AI辅助研发成为走在时代前端的核心竞争力。在这篇文章中&#xff0c;我们将…