Qt QNetworkAccessManager 简述及例程
本文介绍了Qt框架中的QNetworkAccessManager类,它是处理网络请求的核心组件,支持HTTP/HTTPS协议的GET、POST等操作。文章通过示例代码演示了如何发送GET和POST请求,并展示了运行结果。关键点包括:1) QNetworkAccessManager需配合QNetworkRequest和QNetworkReply使用;2) 请求完成后需手动删除QNetworkRepl
·
这里写目录标题
引言
QNetworkAccessManager是 Qt 框架中用于处理网络请求的核心类,支持多种常见协议,如基于 HTTP/HTTPS 协议的 GET、POST、PUT 等请求功能,支持异步操作、信号槽机制和 cookie 管理。通常与QNetworkRequest和QNetworkReply配合使用。
一、简述
QNetworkAccessManager允许应用程序发送网络请求和接收回复。
网络访问API是围绕一个QNetworkAccessManager对象构建,该对象保存其发送的请求的公共配置和设置。它包含代理和缓存配置,以及与这些问题相关的信号,以及可用于监视网络操作进度的回复信号。创建QNetworkAccessManager对象后,应用程序可以使用它通过网络发送请求。QNetworkRequest保存要与其一起发送的请求。其提供了一组标准函数(如:get、post、put等),这些函数接受请求和可选数据,每个函数返回一个QNetworkReply对象。返回的对象用于获取响应相应请求而返回的数据。
-
- 请求完成后,需要手动删除QNetworkReply对象。在连接到其
finished()信号的槽函数使用deleteLater()函数删除。
- 请求完成后,需要手动删除QNetworkReply对象。在连接到其
-
- 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
更多推荐


所有评论(0)