You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:32:33