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

Qt QNetworkAccessManager 简述及例程

这里写目录标题

  • 引言
  • 一、简述
  • 二、例程
    • 2.1 发送GET请求
    • 2.2 发送POST请求
  • 三、参考链接

引言

QNetworkAccessManager 是 Qt 框架中用于处理网络请求的核心类,支持多种常见协议,如基于 HTTP/HTTPS 协议的 GET、POST、PUT 等请求功能,支持异步操作、信号槽机制和 cookie 管理。通常与 QNetworkRequestQNetworkReply 配合使用。

一、简述

QNetworkAccessManager允许应用程序发送网络请求和接收回复。
网络访问API是围绕一个QNetworkAccessManager对象构建,该对象保存其发送的请求的公共配置和设置。它包含代理和缓存配置,以及与这些问题相关的信号,以及可用于监视网络操作进度的回复信号。创建QNetworkAccessManager对象后,应用程序可以使用它通过网络发送请求。QNetworkRequest保存要与其一起发送的请求。其提供了一组标准函数(如:getpostput等),这些函数接受请求和可选数据,每个函数返回一个QNetworkReply对象。返回的对象用于获取响应相应请求而返回的数据。

    1. 请求完成后,需要手动删除QNetworkReply对象。在连接到其finished()信号的槽函数使用deleteLater()函数删除。
    1. QNetworkAccessManager会将接收到的请求排队。并行执行的请求数量取决于协议。目前,对于桌面平台上的HTTP协议,一个主机/端口组合并行执行6个请求。

二、例程

使用Apifox自带的示例项目进行接口测试:
在这里插入图片描述

2.1 发送GET请求

  • 运行结果如下所示:
    在这里插入图片描述

  • 源码:

#include <QCoreApplication>
#include <QObject>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 创建管理器QNetworkAccessManager manager;// 构造请求(示例为 GET 请求)QNetworkRequest request(QUrl("http://127.0.0.1:4523/m1/6845287-6559514-default/pet/1"));//request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");// 发送请求并连接信号槽QNetworkReply *reply = manager.get(request);QObject::connect(reply, &QNetworkReply::finished, [&]() {if (reply->error() == QNetworkReply::NoError) {qDebug() << "Response:" << reply->readAll();} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();});return a.exec();
}

2.2 发送POST请求

  • 运行结果如下所示:
    在这里插入图片描述

  • 源码:

#include <QCoreApplication>
#include <QObject>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 创建管理器QNetworkAccessManager manager;// 构造请求(示例为 POST 请求)QNetworkRequest request(QUrl("http://127.0.0.1:4523/m1/6845287-6559514-default/pet"));request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");// 发送的数据QByteArray postData;postData.append("name=Hello%20Kitty&status=sold"); // 表单数据示例// 发送请求并连接信号槽QNetworkReply *reply = manager.post(request, postData);QObject::connect(reply, &QNetworkReply::finished, [=]() {if (reply->error() == QNetworkReply::NoError) {QByteArray response = reply->readAll();qDebug() << "Response:" << response;} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater();});return a.exec();
}

三、参考链接

  • Qt 实战教程:使用 QNetworkAccessManager 发送 HTTP POST:https://blog.csdn.net/2401_87117051/article/details/149858699
  • QT httpServer多线程后台服务器的例子实现:https://blog.csdn.net/qq_44667165/article/details/138282615
  • QT5.12编译QtHttpServer,亲测可用:https://blog.csdn.net/billcoco/article/details/148846299?spm=1001.2101.3001.6650.1
http://www.xdnf.cn/news/19391.html

相关文章:

  • C++11——万能模板及完美转发
  • GMTapSDK 扩展使用文档
  • 【开题答辩全过程】以 基于springboot的垃圾分类管理系统为例,包含答辩的问题和答案
  • LSTM原理理解
  • 8.29学习总结
  • 大语言模型(LLM)简介与应用分享
  • Linux-数据库
  • 旅游景点库系统的设计与实现(代码+数据库+LW)
  • 力扣hot100:轮转数组(常规思路与三步反转讲解)(189)
  • mmaction安装的详细说明帖
  • 王立群《读史记-刘邦》读书笔记
  • 嵌入式C学习笔记之编码规范
  • 数学分析原理答案——第七章 习题12
  • AI大模型实战解析-RAG知识库+LangChain项目实战
  • Linux系统的进程管理
  • Unity3D Gizmos 调试可视化
  • Qt中UDP回显服务器和客户端
  • 第二十七天-ADC模数转换实验
  • python反转字符串
  • 三维重建模型、3DGS、nerf、 mip-nerf
  • 《WINDOWS 环境下32位汇编语言程序设计》第9章 通用控件(2)
  • 点接触混合润滑完整数值解
  • 免税商品优选购物商城系统|java技术开发
  • MATLAB R2010b系统环境(三)MATLAB操作界面
  • JavaWeb01
  • 【Linux】创建线程
  • 基于K8s部署Redis高可用
  • mit6.031软件构造 笔记 Testing
  • Redis进阶(上)
  • Win11输入法异常解决方案