Qt6中如何通过QNetworkRequest设置POST请求体?
在Qt6中发送JSON格式的POST请求
你不需要把JSON文档和QUrlQuery结合,直接构造JSON请求体并设置正确的请求头即可,具体实现如下:
完整代码示例
#include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> #include <QJsonDocument> #include <QJsonObject> // 嵌入到你的业务代码中 QNetworkRequest request; request.setUrl(QUrl("someurl")); // 设置请求头,告知服务器请求体为JSON格式 request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); // 构造JSON数据结构 QJsonObject jsonObj; jsonObj.insert("somekey", "somevalue"); // 可按需添加更多键值对 jsonObj.insert("numberKey", 456); jsonObj.insert("boolKey", true); // 将JSON对象转换为可传输的字节数组 QJsonDocument jsonDoc(jsonObj); QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact); // 若需要格式化输出,改用QJsonDocument::Indented // 初始化网络管理器并发送POST请求 QNetworkAccessManager* nm = new QNetworkAccessManager(this); // 指定父对象避免内存泄漏 QNetworkReply* reply = nm->post(request, jsonData); // 监听请求完成信号,处理响应或错误 connect(reply, &QNetworkReply::finished, this, [=](){ if(reply->error() == QNetworkReply::NoError){ QByteArray response = reply->readAll(); // 此处处理服务器返回的响应数据 } else { qDebug() << "请求错误:" << reply->errorString(); } // 及时释放资源 reply->deleteLater(); nm->deleteLater(); });
核心要点说明
- 请求头必须设置:
Content-Type: application/json是服务器识别JSON请求体的关键,缺失会导致服务器无法正确解析数据。 - JSON构造逻辑:用
QJsonObject组织键值对,QJsonDocument负责将对象序列化为字节数组,两种序列化模式可根据调试或传输需求选择。 - 内存管理:给
QNetworkAccessManager指定父对象,或在请求结束后手动释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

