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

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.dtcms.com/a/360534.html

相关文章:

  • 畅问AI-AI机器人对话平台
  • dayjs ​JavaScript 时间日期处理库
  • 力扣hot100:轮转数组(常规思路与三步反转讲解)(189)
  • C#基础(②音乐播发器MCI(Media Control Interface))
  • CMake⼯程指南-3
  • 手写MyBatis第45弹:动态代理在MyBatis插件内核是如何织入扩展逻辑的
  • Linux软件升级方法总结
  • CF每日3题(1500-1600)
  • 在windows系统下安装Docker Desktop后迁移镜像位置
  • 科普:requirements.txt 和 environment.yml
  • 【系统分析师】高分论文:论面向服务方法在信息系统开发中的应用
  • 一些八股总结
  • Langflow Agents 技术深度分析
  • OpenCL C 平台与设备
  • (附源码)基于Vue的教师档案管理系统的设计与实现
  • 【开题答辩全过程】以 基于Java的网络购物平台设计与实现为例,包含答辩的问题和答案
  • LeetCode 3665. 统计镜子反射路径数目
  • react-virtualized React 应用中高效渲染大型列表和表格数据的库
  • Synchronized 概述
  • 【LeetCode】18、四数之和
  • LeeCode 37. 解数独
  • 并发编程——10 CyclicBarrier的源码分析
  • Selenium 等待机制:编写稳定可靠的自动化脚本
  • spi总线
  • 7.2elementplus的表单布局与模式
  • MCP SDK 学习二
  • 艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则
  • Python 2025:AI代理、Rust与异步编程的新时代
  • 张柏芝亮相林家谦演唱会 再次演绎《任何天气》
  • Spring MVC 九大组件源码深度剖析(五):HandlerAdapter - 处理器的执行引擎