49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
|
|
#include "HttpHelper.h"
|
||
|
|
#include <QNetworkProxy>
|
||
|
|
#include "ConfigHelper.h"
|
||
|
|
|
||
|
|
void HttpHelper::postRequest(const QString& url, const QJsonObject& jsonBody,
|
||
|
|
std::function<void(int code, const QJsonObject& resp)> callback)
|
||
|
|
{
|
||
|
|
QNetworkAccessManager* manager = new QNetworkAccessManager();
|
||
|
|
manager->setProxy(QNetworkProxy::NoProxy);
|
||
|
|
|
||
|
|
QNetworkRequest req(url);
|
||
|
|
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||
|
|
// Add auth token header
|
||
|
|
QString token = ConfigHelper::instance().getValue("Server", "client_token");
|
||
|
|
req.setRawHeader("X-Client-Token", token.toUtf8());
|
||
|
|
|
||
|
|
QByteArray data = QJsonDocument(jsonBody).toJson(QJsonDocument::Compact);
|
||
|
|
qDebug() << "=== POST Request ===";
|
||
|
|
qDebug() << "Url:" << url;
|
||
|
|
qDebug() << "Body:" << data;
|
||
|
|
|
||
|
|
QNetworkReply* reply = manager->post(req, data);
|
||
|
|
QEventLoop loop;
|
||
|
|
|
||
|
|
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||
|
|
loop.exec();
|
||
|
|
|
||
|
|
int retCode = 0;
|
||
|
|
QJsonObject retObj;
|
||
|
|
|
||
|
|
if (reply->error() != QNetworkReply::NoError)
|
||
|
|
{
|
||
|
|
qDebug() << "Network error code:" << reply->error();
|
||
|
|
qDebug() << "Error detail:" << reply->errorString();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
retCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||
|
|
QByteArray respData = reply->readAll();
|
||
|
|
qDebug() << "Server raw response:" << respData;
|
||
|
|
QJsonDocument doc = QJsonDocument::fromJson(respData);
|
||
|
|
retObj = doc.object();
|
||
|
|
}
|
||
|
|
|
||
|
|
callback(retCode, retObj);
|
||
|
|
|
||
|
|
reply->deleteLater();
|
||
|
|
manager->deleteLater();
|
||
|
|
}
|