Qt6/5 网络编程-HTTP GET/POST请求

开发平台为 VS2022+Qt 组件，可能与 QtCreator 略有不同

1. 为项目配置 Network 库

Qt 安装目录下的应当有 include 文件夹和 lib 文件夹，其中分别可以找到文件夹 QtNetwork 与文件 Qt6Network.lib (Debug 编译为 Qt6Networkd.lib，Qt5 为 Qt5Network.lib）

在项目属性中 C/C++--> 常规 --> 附加包含目录中添加行

Copy
$(QTDIR)\include\QtNetwork

在项目属性中链接器 --> 输入 --> 附加依赖库中添加行

Copy
$(QTDIR)\lib\Qt6Network.lib

Release 模式同理自行配置头文件和库文件

2. 头文件

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

QtNetwork 是异步的，每个进程中需要一个 QNetworkAccessManager 对象来进行网络对象管理
我们将通过 QNetworkRequest 进行请求
通过 QNetworkReply 获取响应

3. 函数实现

Copy
//QtNetwork.cpp
connect(ui.GETButton, SIGNAL(clicked()), this, SLOT(onGETButtonClicked()));

假设将 GETButton 的点击信号与槽函数 onGETButtonClicked 进行绑定

Copy
//QtNetwork.hpp private slots:
void onGETButtonClicked() {
QNetworkRequest request;
QNetworkAccessManager* naManager = new QNetworkAccessManager(this);
connect(naManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));

request.setUrl(QUrl("https://www.baidu.com"));
QNetworkReply* reply = naManager->get(request);
}

首先建立 QNetworkAccessManager 和 QNetworkRequest 对象，naManager 请用 new 建立（前面提到 QNetwork 是异步的，不阻塞的情况下 QNetworkAccessManager 退出函数就会被销毁）
接着将 naManager 的 finished (QNetworkReply*) 信号与槽函数 requestFinished (QNetworkReply*) 绑定
设置 request 的 HTTP 请求 Url，并建立对象 reply 获取 GET 请求响应

Copy
void requestFinished(QNetworkReply* reply) {
QString Result;
// 获取http状态码
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if (statusCode.isValid())
Result+=QString("status code=%1\n").arg(statusCode.toInt());

QVariant reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
if (reason.isValid())
Result+=QString("reason=%1\n").arg(reason.toString());

QNetworkReply::NetworkError err = reply->error();
if (err != QNetworkReply::NoError) {
Result+=QString("Failed: %1\n").arg(reply->errorString());
}
else {
// 获取返回内容
Result+= reply->readAll();
}
ui.Result->setText(Result);
}

先前使用 reply 获取响应结果，在这里解析响应即可

参考文章：https://blog.csdn.net/china_jeffery/article/details/83246355