QT使用HTTP上传json格式数据源码分享

话不多说,直接上源码

httpHelper.h

cpp 复制代码
#ifndef HTTPHELPER_H
#define HTTPHELPER_H

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QJsonParseError>
#include <QJsonObject>
#include <QTime>
#include <QEventLoop>
#include <QMutex>
#include <QMap>
#include <QHttpMultiPart>
#include <QUrlQuery>

class HttpHelper : public QObject
{
    Q_OBJECT
public:
    explicit HttpHelper(QObject *parent = nullptr);
    ~HttpHelper();

    void uploadSyncVertifyInfoSlot(QString url,const QMap<QString,QString> body,QString value);
private:
    QNetworkAccessManager *networkAccessManager;
};

#endif // HTTPHELPER_H

httpHelper.cpp

cpp 复制代码
HttpHelper::HttpHelper(QObject *parent)
    : QObject{parent}
{
    this->networkAccessManager = new QNetworkAccessManager(this);
}
HttpHelper::~HttpHelper()
{
    if(this->networkAccessManager)
    {
        this->networkAccessManager->clearAccessCache();
        this->networkAccessManager->destroyed();
        delete this->networkAccessManager;
    }
}
void HttpHelper::uploadSyncVertifyInfoSlot(QString url, const QMap<QString, QString> body, QString value)
{
    this->networkAccessManager->setTransferTimeout(2000);

    //发送异步get请求
    QNetworkRequest request;


    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
    request.setHeader(QNetworkRequest::ContentLengthHeader, value.toUtf8().size());
    for(QMap<QString,QString>::ConstIterator it = body.begin();it != body.end();it++)
    {
        request.setRawHeader(it.key().toUtf8(),it.value().toUtf8());
    }
    request.setUrl(QUrl(url));
    //qDebug()<<request.url().toString();

    QNetworkReply *reply = this->networkAccessManager->post(request,value.toUtf8());

    connect(reply, &QNetworkReply::finished,
            [=]()
            {
                if(reply->error()!=QNetworkReply::NoError)
                {
                    //处理中的错误信息
                    qWarning()<<"upload reply error:"<<reply->error();
                    qDebug()<<"upload reply error string:"<<reply->errorString();
                    qDebug()<<"upload status code:"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
                    if(reply->isOpen())
                        qDebug()<<"upload response content:"<<reply->readAll();
                }
                else
                {
                    //获取响应信息
                    QByteArray replyData = reply->readAll();
                    qDebug()<<"upload reply:"<<replyData;
                }
                reply->deleteLater();
            });
}

使用方法

cpp 复制代码
//上次数据
QJsonObject jsonObj;
jsonObj["letter_id"] = letterId;
jsonObj["courier_number"] = courierNumber;
jsonObj["attachment"] = attachment;
jsonObj["load_start_time"] = dateTime;
jsonObj["verify_finished_time"] = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
jsonObj["verify_result"] = verifyRes?"Success":"Failed";
jsonObj["batch_no"] = TaskManage::getRunningTask().taskName;

// 将JSON对象包装成一个QJsonDocument
QJsonDocument jsonDoc(jsonObj);

// 将JSON文档转换为字符串
QString jsonString = jsonDoc.toJson(QJsonDocument::Compact);

QString url = R"(https://xxxxxxxxxx)";

QMap<QString,QString> contentMap;
contentMap["Authorization"] = QString("Bearer ").append(token);
this->httpHelper->uploadSyncVertifyInfo(url,contentMap,jsonString);
相关推荐
武藤一雄1 小时前
一款基于WPF开发的BEJSON转换工具
windows·c#·json·wpf
Bruce_Liuxiaowei1 小时前
网站敏感文件_目录大全(分类记忆+风险标注)
运维·网络·网络协议·http·网络安全·https
联系QQ 180809512 小时前
基于SVPWM改进的异步电机/感应电机直接转矩控制:解决传统DTC转矩纹波大的问题“ 参考文...
json
娱乐我有3 小时前
北京深梵科技公益捐赠二十万 赋能流浪动物温暖过冬
人工智能·科技·json
charlee443 小时前
使用cpp-httplib发布HTTP服务
c++·http·json·cpp-httplib
扶尔魔ocy3 小时前
【QT window】multimedia+ffmpeg实现(PCM和MP4)录音功能
qt·ffmpeg·pcm
YouEmbedded4 小时前
解码 Qt 交互:滑动交互、窗口拖拽
qt·滑动交互·上滑关闭·滑动显示 / 隐藏
郝学胜-神的一滴4 小时前
使用EBO绘制图形:解锁高效渲染与内存节省之道
c++·qt·游戏·设计模式·系统架构·图形渲染
就是有点傻5 小时前
ASP.NET Core Web API中的launchSettings.json介绍
json·asp.net
爬山算法5 小时前
Netty(22)如何实现基于Netty的HTTP客户端和服务器?
服务器·网络协议·http