Qt使用HTTP上傳json格式數(shù)據(jù)
話不多說(shuō),直接上源碼
httpHelper.h
#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
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); //發(fā)送異步get請(qǐng)求 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) { //處理中的錯(cuò)誤信息 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 { //獲取響應(yīng)信息 QByteArray replyData = reply->readAll(); qDebug()<<"upload reply:"<<replyData; } reply->deleteLater(); }); }
具體使用方法
//上次數(shù)據(jù) 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對(duì)象包裝成一個(gè)QJsonDocument QJsonDocument jsonDoc(jsonObj); // 將JSON文檔轉(zhuǎn)換為字符串 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);
到此這篇關(guān)于Qt使用HTTP上傳json格式數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Qt HTTP上傳json內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort
這篇文章主要介紹了C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort,回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)2022-08-08OpenCV使用稀疏光流實(shí)現(xiàn)視頻對(duì)象跟蹤的方法詳解
這篇文章主要為大家詳細(xì)介紹了OpenCV如何使用稀疏光流實(shí)現(xiàn)視頻對(duì)象跟蹤功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-02-02Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單易上手版
在Qt應(yīng)用程序里,可實(shí)現(xiàn)遠(yuǎn)程MySQL服務(wù)器的連接操作,本文就來(lái)介紹一下Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11通過(guò)c++的sort函數(shù)實(shí)現(xiàn)成績(jī)排序功能
這篇文章主要介紹了通過(guò)c++的sort函數(shù)實(shí)現(xiàn)成績(jī)排序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02php5系列的apache遠(yuǎn)程執(zhí)行漏洞攻擊腳本
這篇文章主要介紹了php5系列的apache遠(yuǎn)程執(zhí)行漏洞攻擊腳本,需要的朋友可以參考下2014-06-06C++使用string的大數(shù)減法運(yùn)算(2)
這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)減法運(yùn)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09通過(guò)一個(gè)小例子來(lái)簡(jiǎn)單理解C語(yǔ)言中的內(nèi)存空間管理
這篇文章主要介紹了通過(guò)一個(gè)小例子來(lái)簡(jiǎn)單理解C語(yǔ)言中的內(nèi)存空間管理,涉及到堆和棧等數(shù)據(jù)結(jié)構(gòu)的基本知識(shí),需要的朋友可以參考下2015-11-11