#include "httpservice.h" #include "mainconfig.h" HttpService::HttpService(QObject *parent) : QObject(parent) { mManager = new QNetworkAccessManager; } QByteArray HttpService::get(QUrl url,quint32 timeoutInMs) { qDebug() << url; //设置超时 QTimer timer; timer.setInterval(timeoutInMs); timer.setSingleShot(true); //构造并发送请求 QNetworkRequest request; request.setUrl(url); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json")); request.setRawHeader("Authorization",QByteArray("Bearer ").append(MainConfig::token)); QNetworkReply *reply = mManager->get(request); //超时绑定 QEventLoop loop; QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); timer.start(); loop.exec(); //处理响应 if (!timer.isActive()) {// 超时 disconnect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); reply->abort(); reply->deleteLater(); qDebug() << "Timeout"; return ""; } QByteArray result = ""; //未超时 timer.stop(); if (reply->error() != QNetworkReply::NoError) { // 错误处理 qDebug() << "Error String : " << reply->errorString(); } else { QVariant variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); int nStatusCode = variant.toInt(); // 根据状态码做进一步数据处理 //QByteArray bytes = pReply->readAll(); qDebug() << "Status Code : " << nStatusCode; if(nStatusCode == 200){ result = reply->readAll(); } } return result; } QByteArray HttpService::postJson(QUrl url,const QByteArray &json, quint32 timeoutInMs) { qDebug() << url << "\n" << json; //设置超时 QTimer timer; timer.setInterval(timeoutInMs); timer.setSingleShot(true); //构造并发送请求 QNetworkRequest request; request.setUrl(url); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json")); request.setRawHeader("Authorization",QByteArray("Bearer ").append(MainConfig::token)); QNetworkReply *reply = mManager->post(request,json); //超时绑定 QEventLoop loop; QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); timer.start(); loop.exec(); //处理响应 if (!timer.isActive()) {// 超时 disconnect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); reply->abort(); reply->deleteLater(); qDebug() << "Timeout"; return ""; } QByteArray result = ""; //未超时 timer.stop(); if (reply->error() != QNetworkReply::NoError) { // 错误处理 qDebug() << "Error String : " << reply->errorString(); } else { QVariant variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); int nStatusCode = variant.toInt(); // 根据状态码做进一步数据处理 //QByteArray bytes = pReply->readAll(); qDebug() << "Status Code : " << nStatusCode; if(nStatusCode == 200){ result = reply->readAll(); } } return result; } void HttpService::login(QString username, QString password) { //构造参数 QString rawJson = "{\"client\":1,\"data\":{\"credential\":\"%2\",\"identifier\":\"%1\"},\"scene\":0,\"type\":3}"; QString json = rawJson.arg(username).arg(password); //发送请求 QByteArray result = postJson(MainConfig::loginUrl,json.toUtf8()); qDebug() << result; //解析响应 QJsonParseError jerror; QJsonDocument jdoc; QJsonObject jobj; jdoc = QJsonDocument::fromJson(result, &jerror); if (jerror.error != QJsonParseError::NoError || !jdoc.isObject() || !jdoc.object().contains("code")) { qDebug() << QString::fromUtf8("登录请求发送失败"); return; } jobj = jdoc.object(); int resCode = jobj.take("code").toInt(); if(resCode == 200){ MainConfig::token = jobj.take("data").toObject().take("token").toString(); qDebug() << MainConfig::token; }else{ qDebug() << "登录失败:" << resCode; } } void HttpService::updateStatus(QString firstAidId, QString status) { //构造参数 QString rawJson = "{\"param\":{\"firstAidId\":\"%1\",\"status\":\"%2\"}}"; QString json = rawJson.arg(firstAidId).arg(status); //发送请求 QByteArray result = postJson(MainConfig::serviceStatusChangedUrl,json.toUtf8()); qDebug() << result; //解析响应 QJsonParseError jerror; QJsonDocument jdoc; QJsonObject jobj; jdoc = QJsonDocument::fromJson(result, &jerror); if (jerror.error != QJsonParseError::NoError || !jdoc.isObject() || !jdoc.object().contains("code")) { qDebug() << QString::fromUtf8("请求失败"); return; } jobj = jdoc.object(); int resCode = jobj.take("code").toInt(); if(resCode == 200){ qDebug() << "updateStatus请求成功"; }else{ qDebug() << "updateStatus失败:" << resCode; } }