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

使用Qt进行HTTP通信的方法

文章目录

  • 1 HTTP协议简介
    • 1.1 HTTP协议的历史和发展
    • 1.2 HTTP协议的特点
    • 1.3 HTTP的工作过程
    • 1.4 请求报文
    • 1.5 响应报文
  • 2 使用Qt进行HTTP通信
    • 2.1 Qt的HTTP通信类
    • 2.2 HTTP通信过程
  • 3 JSON
    • 3.1 cJSON库简介
    • 3.2 cJSON库的设计思想和数据结构
    • 3.3 cJSON库的使用方法

1 HTTP协议简介

1.1 HTTP协议的历史和发展

HTTP诞生于1991年,最初的版本号是0.9。1996年,HTTP/1.0诞生,增加了HEAD、POST等方法,增加了响应状态码并引入了HTTP Header(HTTP头部)。1999年推出的HTTP/1.1引入了长连接、并发连接、管道机制等。2015年,发布了HTTP/2,默认不再使用ASCII编码传输数据,而是改为传输二进制数据。HTTP/2在发送请求时会将每个请求的内容封装成带有编号的帧,然后同时发送。这种利用一个连接来发送多个请求的方式称为“多路复用”。2018年发布了HTTP/3。HTTP/3将底层依赖的TCP协议改成了UDP协议。

1.2 HTTP协议的特点

HTTP协议是基于请求与响应模式的、无状态的协议。请求由客户端发起,服务端响应请求。无状态指在客户端和服务端交互完成后,两者之间不会保留任何状态信息。HTTP协议的通信方式简单、灵活,具有很好的可扩展性。

1.3 HTTP的工作过程

(1)建立TCP连接。
解析服务器的域名,得到服务器IP地址。然后和服务器建立TCP连接。
(2)浏览器向服务器发送HTTP请求。包括客户端需要的文档信息和Accept、User-Agent等附加信息。
(3)服务器应答。应答内容包括HTTP协议的版本号、应答状态码、被请求的文档内容等。
(4)服务器关闭HTTP连接。
(5)重复2~4步,浏览器请求并接收服务器应答的HTML、CSS、JS、图片等文档、进行页面渲染,或者将接收到应答文件进行保存。
(6)服务器关闭TCP连接。当服务器决定不再与浏览器通信时,就会关闭TCP连接。

1.4 请求报文

HTTP/1.1的请求报文由四部分构成。请求行包括请求方法、URL和协议版本。头部位于请求行之后,每一行都包含一个头部字段名和对应的值。实体是请求报文的数据,在POST方法中使用。如果请求方法为GET,那么请求数据为空。实体与头部之间用一个空行分隔。报文中的空格、回车符和换行符均不可省略。
请求方法是客户端通过请求方法向服务器说明自己的意图的方式,常用的有GET、POST、PUT、DELETE等方法。
头部由一系列的“字段:值”构成,起到了传递额外信息的作用。

1.5 响应报文

服务器收到请求报文后,就会做出响应并发送响应报文。响应报文在结构上与请求报文几乎完全一致,只是个别字段的作用不同。
响应报文由三部分构成。状态行包括协议版本、状态码和状态短语。头部与请求报文中的头部类似,由一系列的“字段:值”构成,起到了传递额外信息的作用。实体是响应报文的数据,在GET方法中使用。实体与头部之间用一个空行分隔。报文中的空格、回车符和换行符均不可省略。

2 使用Qt进行HTTP通信

2.1 Qt的HTTP通信类

Qt的网络模块提供了HTTP通信类QNetworkRequestQnetworkAccessManagerQNetworkReply。要使用这些类,需要在项目的pro文件中引用network模块:
QT += network
并在源文件中引用头文件:

#include <QNetworkRequest>
#include <QNetworkAccessManager> 
#include <QNetworkReply>

2.2 HTTP通信过程

使用这几个类进行HTTP通信的过程可以分为三步:
(1) 使用QNetworkRequest类对象创建网络请求。
(2) 使用QNetworkAccessManager类对象执行网络通信。QNetworkAccessManager类对象用于管理程序的HTTP通信,提供了get()、post()、put()等多个函数,分别对应于HTTP协议的GET、POST、PUT等方法。调用这些函数会返回一个QNetworkReply对象,里面保存着服务器的响应数据。一个程序只要有一个QnetworkAccessManager类对象即可。QNetworkAccessManager类还提供了一些信号,如收到服务器响应的finished()信号,网络状态发生改变的networkAccessibleChanged()信号等。
(3) 通过QNetworkReply接收服务器响应。
QNetworkAccessManager类对象会将服务器的响应报文保存在一个QNetworkReply类对象中,并通过信号finished(QNetworkReply*)将这个QNetworkReply类对象的指针发射出去。QNetworkReply类也是QIODevice的子类,可以像操作串口一样调用read()函数读取服务器返回的信息。QNetworkReply类还提供了finished()、readyRead()等信号,可以根据信号执行相应的操作。

3 JSON

JSON是一种轻量级的数据交换格式,它采用完全独立于编程语言的文本格式来存储和表示数据,可以高效地传递大量数据。
JSON的数据类型

(1)数值:即十进制数,如12、3.14、5.2e4等。在JSON中,数值可以为负数,可以有小数部分,还可以用e或者E表示指数部分,但是不能有前导0。JSON不区分整数与浮点数。

(2)字符串:即以英文双引号包围起来的零个或多个Unicode字符,如"Hello"或""。

(3)布尔值:即true或者false。JSON的布尔值必须是小写字母。

(4)数组:即有序的零个或者多个值,每个值可以为任意类型。数组使用英文方括号包围起来,元素之间用英文逗号分隔,如:[“aa”, “bb”, “cc”]、[[3, 1], [4, 1], [5, 9]]等。

(5)对象:对象以英文花括号包围起来,内部包含若干无序的键-值对。不同键值对之间使用逗号分隔。键只能是字符串,值可以是上述各种类型的数据,也可以是另一个对象(即对象的嵌套)。

3.1 cJSON库简介

cJSON是一个使用C语言编写的JSON操作库,具有轻便、可移植、单文件的特点,可以方便地生成、解析JSON数据。cJSON库的源码文件只有两个,即cJSON.h和cJSON.c。使用时只需将这两个文件添加到工程即可。

3.2 cJSON库的设计思想和数据结构

cJSON在生成和解析JSON数据时,不是将一整段JSON数据作为整体进行处理,而是将整个JSON数据拆分成了一个一个的键值对。每个键值对都保存在一个cJSON结构体中。按照JSON数据的层次关系,处于同一级的cJSON结构体组成双向链表,不同级的链表之间通过指针连接。

3.3 cJSON库的使用方法

cJSON库提供了一系列API来生成和解析JSON数据。其中,生成JSON数据的API包括cJSON_CreateObject()cJSON_CreateArray()cJSON_CreateString()cJSON_CreateNumber()等;解析JSON数据的API包括cJSON_Parse()cJSON_GetObjectItem()cJSON_GetArraySize()等。使用cJSON库,可以方便地在C语言中处理JSON数据。

相关文章:

使用Qt进行HTTP通信的方法

文章目录 1 HTTP协议简介1.1 HTTP协议的历史和发展1.2 HTTP协议的特点1.3 HTTP的工作过程1.4 请求报文1.5 响应报文 2 使用Qt进行HTTP通信2.1 Qt的HTTP通信类2.2 HTTP通信过程 3 JSON3.1 cJSON库简介3.2 cJSON库的设计思想和数据结构3.3 cJSON库的使用方法 1 HTTP协议简介 1.1…...

第45节——页面中修改redux里的数据

一、什么是action 在 Redux 中&#xff0c;Action 是一个简单的 JavaScript 对象&#xff0c;用于描述对应应用中的某个事件&#xff08;例如用户操作&#xff09;所发生的变化。它包含了一个 type 属性&#xff0c;用于表示事件的类型&#xff0c;以及其他一些可选的数据。 …...

软考 系统架构设计师系列知识点之软件架构风格(2)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之软件架构风格&#xff08;1&#xff09; 这个十一注定是一个不能放松、保持“紧”的十一。由于报名了全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;11月4号就要考试&#xff0c;因此…...

【C++11】Lambda 表达式:基本使用 和 底层原理

文章目录 Lambda 表达式1. 不考虑捕捉列表1.1 简单使用介绍1.2 简单使用举例 2. 捕捉列表 [ ] 和 mutable 关键字2.1 使用方法传值捕捉传引用捕捉 2.2 捕捉方法一览2.3 使用举例 3. lambda 的底层分析 Lambda 表达式 书写格式&#xff1a; [capture_list](parameters) mutabl…...

【网络安全---ICMP报文分析】Wireshark教程----Wireshark 分析ICMP报文数据试验

一&#xff0c;试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机&#xff08;虚拟机&#xff09; kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置&#xff1a; 编辑-------- 虚拟网路编辑器 更改设置进来以后 &#xff0c;先选择N…...

【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…...

Java Applet基础

Java Applet基础 目录 Java Applet基础 Applet的生命周期 "Hello, World" Applet: Applet 类 Applet的调用 获得applet参数 指定applet参数 应用程序转换成Applet 事件处理 显示图片 播放音频 applet是一种Java程序。它一般运行在支持Java的Web浏览器内。因…...

【记录】IDA|IDA怎么查看当前二进制文件自动分析出来的内存分布情况(内存范围和读写性)

IDA版本&#xff1a;7.6 背景&#xff1a;我之前一直是直接看Text View里面的地址的首尾地址来判断内存分布情况的&#xff0c;似乎是有点不准确&#xff0c;然后才想到IDA肯定自带查看内存分布情况的功能&#xff0c;而且很简单。 可以通过View-Toolbars-Segments&#xff0c…...

LIMS实验室信息管理系统源码 基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体

LIMS 是一个集现代化管理思想与基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体&#xff0c;以实验室业务和管理工作为核心&#xff0c;遵循实验室管理国际规范&#xff0c;实现对实验室全方位管理的信息管理系统。 LIMS将样品管理、数据管理…...

有效括号相关

相关题目 20. 有效的括号 921. 使括号有效的最少添加 1541. 平衡括号字符串的最少插入次数 32. 最长有效括号 # 20. 有效的括号 class Solution:def isValid(self, s: str) -> bool:stack []for pare in s:if pare in ([{:stack.append(pare)if not stack or (pare ) and…...

浅谈泛型擦除

文章目录 泛型擦除(1)转换泛型表达式(2)转换泛型方法泛型擦除带来的问题 泛型擦除 在编码阶段使用泛型时加上的类型参数&#xff0c;会被编译器在编译阶段去掉&#xff0c;这个过程叫做泛型擦除。 泛型主要用于编译阶段。在编译后生成的Java字节码文件中不包含泛型中的类型信息…...

nodejs+vue校园跑腿系统elementui

购物车品结算,管理个人中心&#xff0c;订单管理&#xff0c;接单处理&#xff0c;商品维护&#xff0c;用户管理&#xff0c;系统管理等功育食5&#xff09;要求系统运行可靠、性能稳定、界面友好、使用方便。 第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术…...

Redis Cluster Cron调度

返回目录 说明 clusterCron 每秒执行10次clusterCron 内置了一个iteration计数器。每一次运行clusterCron&#xff0c;iteration都加1。当 iteration % 10 0的时候&#xff0c;就会随机选取一个节点&#xff0c;给它发送PING。而由于clusterCron每秒执行10次&#xff0c;所以…...

Redis Cluster Gossip Protocol: Message

返回目录 消息结构 消息头部消息数据&#xff08;可选&#xff09;extension&#xff08;可选&#xff09; 消息头部 字段定义 Signature: “RCmb” 这4个字符&#xff08;Redis Cluster message bus 的简称&#xff09;totalLen: 消息的总字节数version&#xff1a;当前为…...

【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解

导航 一. 垃圾收集算法详解1. 分代收集算法2. 标记-复制算法3. 标记-清除算法4. 标记-整理算法二. 垃圾收集器详解1. Serial收集器2. Parallel Scavenge收集器3. ParNew收集器4. CMS收集器三. 垃圾收集底层三色标记算法实现原理1. 垃圾收集底层使用三色标记算法的原因?2. 垃圾…...

STM32复习笔记(四):独立看门狗IWDG

目录 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;CUBEMX工程配置 &#xff08;三&#xff09;相关函数 总结&#xff1a; &#xff08;一&#xff09;简介 独立看门狗本质是一种定时器&#xff0c;其作用是监视系统的运行&#xff0c;当系统发生错误&…...

SpringBoot中常用注解的含义

一、方法参数注解 1. PathVariable 通过RequestMapping注解中的 { } 占位符来标识URL中的变量部分 在控制器中的处理方法的形参中使用PathVariable注解去获取RequestMapping中 { } 中传进来的值&#xff0c;并绑定到处理方法定一的形参上。 //请求路径&#xff1a;http://3333…...

学位论文的写作方法,较好的参考文章

摘要 结合2个文章&#xff1a; [1]程鑫. 网联环境下交通状态预测与诱导技术研究[D]. 长安大学, 2017. [2]吴昊. 关中平原水资源变化特征与干旱脆弱性研究[D]. 长安大学, 2018. 主要研究内容及技术路线 各章小结和引言的写作 [1]程鑫. 网联环境下交通状态预测与诱导技术…...

基于SpringBoot的科研工作量获奖项目管理平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

嵌入式Linux应用开发-驱动大全-第一章同步与互斥④

嵌入式Linux应用开发-驱动大全-第一章同步与互斥④ 第一章 同步与互斥④1.5 自旋锁spinlock的实现1.5.1 自旋锁的内核结构体1.5.2 spinlock在UP系统中的实现1.5.3 spinlock在SMP系统中的实现 1.6 信号量semaphore的实现1.6.1 semaphore的内核结构体1.6.2 down函数的实现1.6.3 u…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...