Qt-系统网络HTTP客户端(66)

ops/2024/10/21 4:34:27/

目录

描述

相关函数

使用

准备工作

处理响应

测试

代码

补充


描述

进⾏ Qt 开发时, 和服务器之间的通信很多时候也会⽤到 HTTP 协议

Qt 中提供了客户端,但是并没有提供相应的服务器的库,所以这里我们只讨论 客户端

• 通过 HTTP 从服务器获取数据.
• 通过 HTTP 向服务器提交数据.

https://i-blog.csdnimg.cn/direct/af0018e21543484391f8b39c75872aba.png" width="1161" />

相关函数

关键类主要是三个.  QNetworkAccessManager , QNetworkRequest ,  QNetworkReply 

QNetworkAccessManager  提供了 HTTP 的核心操作.

get(const QNetworkRequest& )发起⼀个 HTTP GET 请求. 返回 QNetworkReply 对象.
post(const QNetworkRequest& , const QByteArray& )发起⼀个 HTTP POST 请求. 返回 QNetworkReply 对象.

QNetworkRequest  表⽰⼀个 HTTP 请求(不含 body).
PS:如果需要发送⼀个带有 body 的请求(⽐如 post), 会在 QNetworkAccessManager 的 post ⽅法中通过单独的参数来传⼊ body

QNetworkRequest(const QUrl& )通过 URL 构造⼀个 HTTP 请求.

setHeader(QNetworkRequest::KnownHeaders header,  const QVariant &value)

设置请求头.

不包含 body 

https://i-blog.csdnimg.cn/direct/ef187723708f4278bc5ef6219dcfbed3.png" width="447" /> 

https://i-blog.csdnimg.cn/direct/684d88155a5749fcb13eacab77a11df7.png" width="827" />

补充:其中的  QNetworkRequest::KnownHeaders 是⼀个枚举类型,常⽤取值如下

ContentTypeHeader描述 body 的类型.
ContentLengthHeader描述 body 的⻓度.
LocationHeader⽤于重定向报⽂中指定重定向地址. (响应中使⽤, 请求⽤不到)
CookieHeader设置 cookie
UserAgentHeader设置 User-Agent

QNetworkReply 表⽰⼀个 HTTP 响应. 这个类同时也是  QIODevice  的⼦类.

error()获取出错状态.
errorString()获取出错原因的⽂本.
readAll()读取响应 body.
header(QNetworkRequest::KnownHeaders header)读取响应指定 header 的值

补充: QNetworkReply 还有⼀个重要的信号 finished 会在客⼾端收到完整的响应数据之后触发.

使用

网络编程一定要加上 network

https://i-blog.csdnimg.cn/direct/054c0fecf426488e853a7a6505fe8e95.png" width="938" />

准备工作

初始界面,这一点和之前的一样

https://i-blog.csdnimg.cn/direct/d32aecba627c400e95a648b9fc037194.png" width="1200" />

我们使用 QPlainTextEdit 来显示读取到的响应

https://i-blog.csdnimg.cn/direct/db1360a6fd7348ed9812217a9ffb8490.png" width="1200" />

处理响应

不会阻塞,得使用 QNetworkReply 里面信号,来触发响应机制

https://i-blog.csdnimg.cn/direct/35d5fea07d92424aa5091fc15cb0b1ab.png" width="1200" />

 

测试

https://i-blog.csdnimg.cn/direct/0ad47ab491e4469b95148d759b645c9c.png" width="1200" />

 

代码

代码书写和其他平台的网络编写流程是差不多的

#include "widget.h"
#include "ui_widget.h"
#include <QNetworkReply>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("客户端");manager = new QNetworkAccessManager(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{// 1.获取到输入框中的 urlQUrl url(ui->lineEdit->text());// 2.构建一个 HTTP 请求对象QNetworkRequest request(url);// 3.发送请求QNetworkReply* response = manager->get(request);// 4.通过信号槽,来处理响应connect(response, &QNetworkReply::finished, this, [=](){if(response->error() == QNetworkReply::NoError){// 响应正确获得了QString html = response->readAll();ui->plainTextEdit->setPlainText(html);}else {// 响应出错了ui->plainTextEdit->setPlainText(response->errorString());}// 注意释放 response 进行释放response->deleteLater();});
}

补充

https://i-blog.csdnimg.cn/direct/3befade476ea4652a9fcd2179b6fc51d.png" width="1200" /> 


http://www.ppmy.cn/ops/127178.html

相关文章

《京东金融APP的鸿蒙之旅系列专题》鸿蒙工程化:Hvigor构建技术

作者&#xff1a;京东科技 杨拓 一、构建工具概述 Hvigor构建工具是一款基于TypeScript实现的构建任务编排工具&#xff0c;专为提升构建和测试应用的效率而设计。它主要提供以下关键功能&#xff1a; 1.任务管理机制&#xff1a;包括任务注册和编排&#xff0c;帮助开发者高效…

CentOS 7.9安装MySQL

下载Linux版MySQL安装包 下载地址https://downloads.mysql.com/archives/community/ 下载解压后 安装&#xff0c;按照从上至下顺序&#xff0c;一条一条执行即可安装完毕。 进入到rpm所在目录rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm rpm -ivh mysql-comm…

oracle数据库名实例名服务名

Oracle数据库是一个复杂的系统&#xff0c;它包含多个组件&#xff0c;包括数据库服务器、实例和服务。 数据库名&#xff08;DB_NAME&#xff09;&#xff1a;这是数据库的内部名称&#xff0c;通常在创建数据库时指定&#xff0c;并在整个数据库生命周期内保持不变。 实例名…

css3新增都知识点

1.新的选择器 属性选择器、伪类选择器、伪元素选择器 2.圆角与阴影 border-radius&#xff08;圆角&#xff09;、box-shadow&#xff08;阴影&#xff09; 3.渐变 线性渐变&#xff08;linear-gradient&#xff09; 径向渐变&#xff08;radial-gradient&#xff09; 4…

【C#】第二章习题

选择题 在C#.NET中&#xff0c;在窗体上显示控件的文本&#xff0c;用_____属性设置。 A&#xff1a;TextB&#xff1a;NameC&#xff1a;CaptionD&#xff1a;Image 正确答案&#xff1a;A 不论何种控件&#xff0c;共同具有的是____属性。 A&#xff1a;TextB&#xff1a;Na…

mysql主从复制及故障修复

一、主MySQL数据库的配置 分别在三台主机&#xff08;chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据&#xff0c;其中chen2/10.110作为主MySQL服务器&#xff0c;其余两台作为从MySQL服务器。 1、在主机上部署mysql数据库 详细的请看上一篇&#xff1a;mysql数据…

突发!审查英特尔!

10月17日消息&#xff0c;据环球时报报道&#xff0c;中国网络空间安全协会发文&#xff0c;披露英特尔产品安全漏洞问题频发、可靠性差、监控用户、暗设后门等问题&#xff0c;“建议启动网络安全审查”&#xff01; 该协会表示&#xff0c;从2023年开始&#xff0c;英特尔CPU…

权限管理系统的详细解析与实现

1. 权限管理的基础概念 1.1 什么是权限管理&#xff1f; 权限管理是指通过对用户身份的验证和权限的分配&#xff0c;控制用户对系统资源的访问范围和操作权限。它主要包括&#xff1a; 认证&#xff1a;确认用户的身份是否合法&#xff0c;通常通过用户名/密码或多因子验证…