|
|
@@ -1,648 +1,655 @@
|
|
|
-#include "HttpClient.h"
|
|
|
-
|
|
|
-#include "../usr/config.h"
|
|
|
-
|
|
|
-#include <QNetworkAccessManager>
|
|
|
-#include <QNetworkRequest>
|
|
|
-#include <QNetworkReply>
|
|
|
-#include <QEventLoop>
|
|
|
-#include <QTimer>
|
|
|
-#include <QHttpPart>
|
|
|
-#include <QBuffer>
|
|
|
-#include <QJsonDocument>
|
|
|
-#include <QJsonObject>
|
|
|
-
|
|
|
-QString HttpClient::sToken = QString();
|
|
|
-
|
|
|
-HttpClient::HttpClient(QObject *parent)
|
|
|
- : QThread(parent)
|
|
|
-{
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-bool HttpClient::getRequest(const QString &url, const QString &token, const QByteArray &inData, QByteArray &outData)
|
|
|
-{
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
-
|
|
|
- QString strUrl = url;
|
|
|
- if(!inData.isNull())
|
|
|
- {
|
|
|
- strUrl = strUrl + "?" + inData;
|
|
|
- }
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(strUrl));
|
|
|
- requestInfo.setRawHeader("Authorization", token.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
- // 发送 post 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->get(requestInfo);
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventLoop;
|
|
|
- connect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventLoop, &QEventLoop::quit);
|
|
|
- eventLoop.exec();
|
|
|
-
|
|
|
- QByteArray array;
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- QString strResult = QString::fromUtf8(result);
|
|
|
- reply->deleteLater();
|
|
|
- outData = strResult.toUtf8();
|
|
|
- return true;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
|
|
|
- reply->deleteLater();
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- outData = "{\"code\":400,\"result\":\"failure\"}";
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-bool HttpClient::postRequest(const QString &url, const QString &token, const QByteArray &inData, QByteArray &outData)
|
|
|
-{
|
|
|
- // 获取当前日期和时间
|
|
|
- QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
- QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
-
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
- QString strUrl = url;
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(strUrl));
|
|
|
- requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
- requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
- requestInfo.setRawHeader("Authorization", token.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
-
|
|
|
- // 发送 post 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->post(requestInfo, inData);
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventLoop;
|
|
|
- connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventLoop, &QEventLoop::quit);
|
|
|
- eventLoop.exec();
|
|
|
-
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- outData = result;
|
|
|
- reply->deleteLater();
|
|
|
- return true;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
|
|
|
- reply->deleteLater();
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- outData = "{\"code\":400,\"result\":\"failure\"}";
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-bool HttpClient::putRequest(const QString &url, const QString &token, const QByteArray &inData, QByteArray &outData)
|
|
|
-{
|
|
|
- // 获取当前日期和时间
|
|
|
- QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
- QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
-
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
- QString strUrl = url;
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(strUrl));
|
|
|
- requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
- requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
- requestInfo.setRawHeader("Authorization", token.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
-
|
|
|
- // 发送 post 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->put(requestInfo, inData);
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventLoop;
|
|
|
- connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventLoop, &QEventLoop::quit);
|
|
|
- eventLoop.exec();
|
|
|
-
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- outData = result;
|
|
|
- reply->deleteLater();
|
|
|
- return true;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
|
|
|
- reply->deleteLater();
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- outData = "{\"code\":400,\"result\":\"failure\"}";
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-void HttpClient::run()
|
|
|
-{
|
|
|
- while(this->m_threadstatus)
|
|
|
- {
|
|
|
- if(m_workStat != httpWorkStat::httpWorkSleep)
|
|
|
- {
|
|
|
- QString res = "";
|
|
|
- switch(m_workStat)
|
|
|
- {
|
|
|
- case httpWorkStat::httpWorkJson:res = postJsonRequest();break;
|
|
|
- case httpWorkStat::httpWorkFormdata:res = postFormdataRequest();break;
|
|
|
- case httpWorkStat::httpWorkGet:res = getRequest();break;
|
|
|
- case httpWorkStat::httpWorkSleep: break;
|
|
|
- }
|
|
|
-
|
|
|
- QByteArray bb = res.toUtf8();
|
|
|
- m_mutex.unlock();
|
|
|
- m_workStat = httpWorkStat::httpWorkSleep;
|
|
|
- //emit signalResponseData(m_id, m_postUrl, bb);
|
|
|
- }
|
|
|
-
|
|
|
- msleep(10);
|
|
|
- }
|
|
|
- qDebug() << "httpclient thread exit!";
|
|
|
-}
|
|
|
-
|
|
|
-QString HttpClient::postJsonRequest()
|
|
|
-{
|
|
|
- // 获取当前日期和时间
|
|
|
- QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
- // qint64 timestampSeconds = currentDateTime.toSecsSinceEpoch();
|
|
|
- QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
-
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
- QString url = "http://";
|
|
|
- url = url + Config()->httpHost + m_postUrl;
|
|
|
- // qDebug() << url;
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(url));
|
|
|
- requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
- requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
- QString auth = m_token;
|
|
|
- requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant-id", Config()->tenant_id.toUtf8());
|
|
|
-
|
|
|
- // QString strInfo = requestInfo.url().toString();
|
|
|
-
|
|
|
- // 发送 post 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->post(requestInfo, m_httpData);
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventloop;
|
|
|
- connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
- eventloop.exec();
|
|
|
-
|
|
|
- QByteArray array;
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- QString strRes = QString::fromUtf8(result);
|
|
|
-
|
|
|
- // qDebug() << "http post success post response=" << strRes;
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- // qDebug() << "http post failed, error code = " << statusCode.toString() << " error info: " << reply->errorString();
|
|
|
- QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
- // qDebug() << "http post timeout";
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
-}
|
|
|
-
|
|
|
-QString HttpClient::postFormdataRequest()
|
|
|
-{
|
|
|
- // 获取当前日期和时间
|
|
|
- QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
- QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
-
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
- QString url = "http://";
|
|
|
- url = url + Config()->httpHost + m_postUrl;
|
|
|
-
|
|
|
- // 创建multipart表单
|
|
|
- QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
|
|
|
-
|
|
|
- if(false == m_httpData.isNull())
|
|
|
- {
|
|
|
- // 添加JSON数据部分
|
|
|
- QHttpPart jsonPart;
|
|
|
- jsonPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"userName\""));
|
|
|
- jsonPart.setBody(m_httpData);
|
|
|
- multiPart->append(jsonPart);
|
|
|
- }
|
|
|
-
|
|
|
- // 添加文件部分
|
|
|
- QHttpPart filePart;
|
|
|
- filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/bmp"));
|
|
|
- filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
|
|
|
- QVariant(QString("form-data; name=\"file\"; filename=\"finger.bmp\"")));
|
|
|
-
|
|
|
-
|
|
|
- QBuffer *buffer = new QBuffer(&m_httpFile);
|
|
|
- if (!buffer->open(QIODevice::ReadOnly)) {
|
|
|
- qDebug() << "无法打开缓冲区";
|
|
|
- delete pHttpMgr;
|
|
|
- delete buffer;
|
|
|
- delete multiPart;
|
|
|
- return "{\"code\":400,\"result\":\"无法打开缓冲区\"}";
|
|
|
- }
|
|
|
- filePart.setBodyDevice(buffer);
|
|
|
- buffer->setParent(multiPart); // 设置父对象以便自动清理
|
|
|
-
|
|
|
- multiPart->append(filePart);
|
|
|
-
|
|
|
-
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(url));
|
|
|
- requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + multiPart->boundary());
|
|
|
- requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
- QString auth = m_token;
|
|
|
- requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
-
|
|
|
- // 发送 post 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->post(requestInfo, multiPart);
|
|
|
- multiPart->setParent(reply); // reply删除时会自动删除multiPart
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventloop;
|
|
|
- connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
- eventloop.exec();
|
|
|
-
|
|
|
- QByteArray array;
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- QString strRes = QString::fromUtf8(result);
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
-}
|
|
|
-
|
|
|
-QString HttpClient::getRequest()
|
|
|
-{
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
- QString url = "http://" + Config()->httpHost;
|
|
|
- url = url + m_postUrl;
|
|
|
- QString getJsonStr = "";
|
|
|
- if(m_httpData != "{}")
|
|
|
- {
|
|
|
- // QString getJsonStr = "";
|
|
|
- QJsonDocument jsonDoc = QJsonDocument::fromJson(m_httpData);
|
|
|
- if (!jsonDoc.isNull() && !jsonDoc.isEmpty() && jsonDoc.isObject()) {
|
|
|
- QJsonObject jsonObj = jsonDoc.object();
|
|
|
- for (const QString& key : jsonObj.keys()) {
|
|
|
- QString value;
|
|
|
- if (jsonObj.value(key).isString()) {
|
|
|
- value = jsonObj.value(key).toString();
|
|
|
- }
|
|
|
- else if (jsonObj.value(key).isDouble()) {
|
|
|
- value = QString::number(jsonObj.value(key).toDouble());
|
|
|
- }
|
|
|
- else {
|
|
|
- value = QString::number(jsonObj.value(key).toInt());
|
|
|
- }
|
|
|
-
|
|
|
- if (getJsonStr.isEmpty()) {
|
|
|
- getJsonStr = key + "=" + value;
|
|
|
- }
|
|
|
- else {
|
|
|
- getJsonStr = getJsonStr + "&" + key + "=" + value;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- url = url + "?" + getJsonStr;
|
|
|
- }
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(url));
|
|
|
- QString auth = m_token;
|
|
|
- requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
- // 发送 get 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->get(requestInfo);
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventloop;
|
|
|
- connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
- eventloop.exec();
|
|
|
-
|
|
|
- QByteArray array;
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- QString strRes = QString::fromUtf8(result);
|
|
|
- QStringList urlSplit = m_postUrl.split("/");
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
-}
|
|
|
-
|
|
|
-QString HttpClient::putJsonRequest()
|
|
|
-{
|
|
|
- // 获取当前日期和时间
|
|
|
- QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
- // qint64 timestampSeconds = currentDateTime.toSecsSinceEpoch();
|
|
|
- QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
-
|
|
|
- QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
- QString url = "http://";
|
|
|
- url = url + Config()->httpHost + m_postUrl;
|
|
|
- // qDebug() << url;
|
|
|
- // 设置头信息
|
|
|
- QNetworkRequest requestInfo;
|
|
|
- requestInfo.setUrl(QUrl(url));
|
|
|
- requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
- requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
- QString auth = m_token;
|
|
|
- requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
- requestInfo.setRawHeader("tenant-id", Config()->tenant_id.toUtf8());
|
|
|
-
|
|
|
- // 发送 put 请求
|
|
|
- QNetworkReply* reply = pHttpMgr->put(requestInfo, m_httpData);
|
|
|
-
|
|
|
- // 添加超时处理,1ms 超时
|
|
|
- QEventLoop eventloop;
|
|
|
- connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
-
|
|
|
- // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
- QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
- eventloop.exec();
|
|
|
-
|
|
|
- QByteArray array;
|
|
|
- if(reply->isFinished()){
|
|
|
- if (reply->error() == QNetworkReply::NoError) {
|
|
|
- // 正常结束,读取响应数据
|
|
|
- QByteArray result = reply->readAll();
|
|
|
- QString strRes = QString::fromUtf8(result);
|
|
|
-
|
|
|
- // qDebug() << "http post success post response=" << strRes;
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- else {
|
|
|
- // 异常结束
|
|
|
- // 请求失败
|
|
|
- QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
-
|
|
|
- // qDebug() << "http post failed, error code = " << statusCode.toString() << " error info: " << reply->errorString();
|
|
|
- QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
- reply->deleteLater();
|
|
|
- return strRes;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- // 请求超时
|
|
|
- disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
- reply->abort();
|
|
|
- // qDebug() << "http post timeout";
|
|
|
- }
|
|
|
-
|
|
|
- reply->deleteLater();
|
|
|
-
|
|
|
- return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
-}
|
|
|
-
|
|
|
-void HttpClient::slotPostRequestData(quint64 id, QString postUrl, QByteArray data, QByteArray file, QString token)
|
|
|
-{
|
|
|
- m_mutex.lock();
|
|
|
- this->m_id = id;
|
|
|
- this->m_postUrl = postUrl;
|
|
|
- this->m_httpData = data;
|
|
|
- this->m_httpFile = file;
|
|
|
- this->m_token = token;
|
|
|
- HttpClient::sToken = token;
|
|
|
- if(!this->m_httpData.isNull() && !this->m_httpFile.isNull())
|
|
|
- {
|
|
|
- m_workStat = httpWorkStat::httpWorkFormdata;
|
|
|
- }
|
|
|
- else if(!this->m_httpData.isNull())
|
|
|
- {
|
|
|
- QString res = postJsonRequest();
|
|
|
- QByteArray bb = res.toUtf8();
|
|
|
- m_mutex.unlock();
|
|
|
-
|
|
|
- if(m_postUrl == Config()->usernameLogin_url) {
|
|
|
- emit signalResponsePasswordLoginData(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->cardLogin_url) {
|
|
|
- emit signalResponseCardLoginData(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->updateNodeApprovalUrl) {
|
|
|
- emit signalResponseUpdateNodeApprovalUrl(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->uploadJobTicketUrl) {
|
|
|
- emit signalResponseUploadJobTicket(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->uploadPositionInfoUrl) {
|
|
|
- emit signalResponseUploadPositionInfo(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->updateUncolockUrl) {
|
|
|
- emit signalResponseUpdateUncolock(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->updateColockUrl) {
|
|
|
- emit signalResponseUpdateColock(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->updatePointUnlock) {
|
|
|
- emit signalResponseUpdatePointUnlock(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->updateBackLock) {
|
|
|
- emit signalResponseUpdateBackLock(bb);
|
|
|
- }
|
|
|
- }
|
|
|
- else if(!this->m_httpFile.isNull())
|
|
|
- {
|
|
|
- m_workStat = httpWorkStat::httpWorkFormdata;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void HttpClient::slotGetRequestData(quint64 id, QString postUrl, QByteArray data, QString token)
|
|
|
-{
|
|
|
- m_mutex.lock();
|
|
|
- this->m_id = id;
|
|
|
- this->m_postUrl = postUrl;
|
|
|
- this->m_httpData = data;
|
|
|
- this->m_token = token;
|
|
|
- HttpClient::sToken = token;
|
|
|
-
|
|
|
- QString res = getRequest();
|
|
|
- QByteArray bb = res.toUtf8();
|
|
|
- m_mutex.unlock();
|
|
|
-
|
|
|
- if (m_postUrl == Config()->jobTicketsUrl) {
|
|
|
- emit signalResponseGetJobTickets(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->workNodeDetail) {
|
|
|
- emit signalResponseGetWorkNodeDetail(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->workNodeDetailForm) {
|
|
|
- emit signalResponseGetFormById(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->userInfoUrl) {
|
|
|
- emit signalResponseGetUserInfoUrl(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->keyMACByNFC) {
|
|
|
- emit signalResponseGetKeyMAC(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->isolationPointById) {
|
|
|
- emit signalResponseGetIsolationPointInfo(bb);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void HttpClient::slotPutRequestData(quint64 id, QString postUrl, QByteArray data, QByteArray file, QString token)
|
|
|
-{
|
|
|
- m_mutex.lock();
|
|
|
- this->m_id = id;
|
|
|
- this->m_postUrl = postUrl;
|
|
|
- this->m_httpData = data;
|
|
|
- this->m_httpFile = file;
|
|
|
- this->m_token = token;
|
|
|
- HttpClient::sToken = token;
|
|
|
- if(!this->m_httpData.isNull() && !this->m_httpFile.isNull())
|
|
|
- {
|
|
|
- m_workStat = httpWorkStat::httpWorkFormdata;
|
|
|
- }
|
|
|
- else if(!this->m_httpData.isNull())
|
|
|
- {
|
|
|
- QString res = putJsonRequest();
|
|
|
- QByteArray bb = res.toUtf8();
|
|
|
- m_mutex.unlock();
|
|
|
-
|
|
|
- if(m_postUrl == Config()->updateUserInfoUrl) {
|
|
|
- emit signalReponseUpdateUserInfoUrl(bb);
|
|
|
- }
|
|
|
- else if (m_postUrl == Config()->updatePasswordUrl) {
|
|
|
- emit signalReponseUpdateUserPasswordUrl(bb);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void HttpClient::slotSetThreadStop()
|
|
|
-{
|
|
|
- this->m_threadstatus = false;
|
|
|
-}
|
|
|
+#include "HttpClient.h"
|
|
|
+
|
|
|
+#include "../usr/config.h"
|
|
|
+
|
|
|
+#include <QNetworkAccessManager>
|
|
|
+#include <QNetworkRequest>
|
|
|
+#include <QNetworkReply>
|
|
|
+#include <QEventLoop>
|
|
|
+#include <QTimer>
|
|
|
+#include <QHttpPart>
|
|
|
+#include <QBuffer>
|
|
|
+#include <QJsonDocument>
|
|
|
+#include <QJsonObject>
|
|
|
+
|
|
|
+QString HttpClient::sToken = QString();
|
|
|
+
|
|
|
+HttpClient::HttpClient(QObject *parent)
|
|
|
+ : QThread(parent)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+bool HttpClient::getRequest(const QString &url, const QString &token, const QByteArray &inData, QByteArray &outData)
|
|
|
+{
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+
|
|
|
+ QString strUrl = url;
|
|
|
+ if(!inData.isNull())
|
|
|
+ {
|
|
|
+ strUrl = strUrl + "?" + inData;
|
|
|
+ }
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(strUrl));
|
|
|
+ requestInfo.setRawHeader("Authorization", token.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
+ // 发送 post 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->get(requestInfo);
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventLoop;
|
|
|
+ connect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventLoop, &QEventLoop::quit);
|
|
|
+ eventLoop.exec();
|
|
|
+
|
|
|
+ QByteArray array;
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ QString strResult = QString::fromUtf8(result);
|
|
|
+ reply->deleteLater();
|
|
|
+ outData = strResult.toUtf8();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
|
|
|
+ reply->deleteLater();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ outData = "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool HttpClient::postRequest(const QString &url, const QString &token, const QByteArray &inData, QByteArray &outData)
|
|
|
+{
|
|
|
+ // 获取当前日期和时间
|
|
|
+ QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
+ QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
+
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+ QString strUrl = url;
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(strUrl));
|
|
|
+ requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
+ requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
+ requestInfo.setRawHeader("Authorization", token.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
+
|
|
|
+ // 发送 post 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->post(requestInfo, inData);
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventLoop;
|
|
|
+ connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventLoop, &QEventLoop::quit);
|
|
|
+ eventLoop.exec();
|
|
|
+
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ outData = result;
|
|
|
+ reply->deleteLater();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
|
|
|
+ reply->deleteLater();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ outData = "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool HttpClient::putRequest(const QString &url, const QString &token, const QByteArray &inData, QByteArray &outData)
|
|
|
+{
|
|
|
+ // 获取当前日期和时间
|
|
|
+ QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
+ QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
+
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+ QString strUrl = url;
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(strUrl));
|
|
|
+ requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
+ requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
+ requestInfo.setRawHeader("Authorization", token.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
+
|
|
|
+ // 发送 post 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->put(requestInfo, inData);
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventLoop;
|
|
|
+ connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventLoop, &QEventLoop::quit);
|
|
|
+ eventLoop.exec();
|
|
|
+
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ outData = result;
|
|
|
+ reply->deleteLater();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
|
|
|
+ reply->deleteLater();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ outData = "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void HttpClient::run()
|
|
|
+{
|
|
|
+ while(this->m_threadstatus)
|
|
|
+ {
|
|
|
+ if(m_workStat != httpWorkStat::httpWorkSleep)
|
|
|
+ {
|
|
|
+ QString res = "";
|
|
|
+ switch(m_workStat)
|
|
|
+ {
|
|
|
+ case httpWorkStat::httpWorkJson:res = postJsonRequest();break;
|
|
|
+ case httpWorkStat::httpWorkFormdata:res = postFormdataRequest();break;
|
|
|
+ case httpWorkStat::httpWorkGet:res = getRequest();break;
|
|
|
+ case httpWorkStat::httpWorkSleep: break;
|
|
|
+ }
|
|
|
+
|
|
|
+ QByteArray bb = res.toUtf8();
|
|
|
+ m_mutex.unlock();
|
|
|
+ m_workStat = httpWorkStat::httpWorkSleep;
|
|
|
+ //emit signalResponseData(m_id, m_postUrl, bb);
|
|
|
+ }
|
|
|
+
|
|
|
+ msleep(10);
|
|
|
+ }
|
|
|
+ qDebug() << "httpclient thread exit!";
|
|
|
+}
|
|
|
+
|
|
|
+QString HttpClient::postJsonRequest()
|
|
|
+{
|
|
|
+ // 获取当前日期和时间
|
|
|
+ QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
+ // qint64 timestampSeconds = currentDateTime.toSecsSinceEpoch();
|
|
|
+ QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
+
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+ QString url = "http://";
|
|
|
+ url = url + Config()->httpHost + m_postUrl;
|
|
|
+ // qDebug() << url;
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(url));
|
|
|
+ requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
+ requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
+ QString auth = m_token;
|
|
|
+ requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant-id", Config()->tenant_id.toUtf8());
|
|
|
+
|
|
|
+ // QString strInfo = requestInfo.url().toString();
|
|
|
+
|
|
|
+ // 发送 post 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->post(requestInfo, m_httpData);
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventloop;
|
|
|
+ connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
+ eventloop.exec();
|
|
|
+
|
|
|
+ QByteArray array;
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ QString strRes = QString::fromUtf8(result);
|
|
|
+
|
|
|
+ // qDebug() << "http post success post response=" << strRes;
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ // qDebug() << "http post failed, error code = " << statusCode.toString() << " error info: " << reply->errorString();
|
|
|
+ QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+ // qDebug() << "http post timeout";
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+}
|
|
|
+
|
|
|
+QString HttpClient::postFormdataRequest()
|
|
|
+{
|
|
|
+ // 获取当前日期和时间
|
|
|
+ QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
+ QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
+
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+ QString url = "http://";
|
|
|
+ url = url + Config()->httpHost + m_postUrl;
|
|
|
+
|
|
|
+ // 创建multipart表单
|
|
|
+ QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
|
|
|
+
|
|
|
+ if(false == m_httpData.isNull())
|
|
|
+ {
|
|
|
+ // 添加JSON数据部分
|
|
|
+ QHttpPart jsonPart;
|
|
|
+ jsonPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"userName\""));
|
|
|
+ jsonPart.setBody(m_httpData);
|
|
|
+ multiPart->append(jsonPart);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加文件部分
|
|
|
+ QHttpPart filePart;
|
|
|
+ filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/bmp"));
|
|
|
+ filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
|
|
|
+ QVariant(QString("form-data; name=\"file\"; filename=\"finger.bmp\"")));
|
|
|
+
|
|
|
+
|
|
|
+ QBuffer *buffer = new QBuffer(&m_httpFile);
|
|
|
+ if (!buffer->open(QIODevice::ReadOnly)) {
|
|
|
+ qDebug() << "无法打开缓冲区";
|
|
|
+ delete pHttpMgr;
|
|
|
+ delete buffer;
|
|
|
+ delete multiPart;
|
|
|
+ return "{\"code\":400,\"result\":\"无法打开缓冲区\"}";
|
|
|
+ }
|
|
|
+ filePart.setBodyDevice(buffer);
|
|
|
+ buffer->setParent(multiPart); // 设置父对象以便自动清理
|
|
|
+
|
|
|
+ multiPart->append(filePart);
|
|
|
+
|
|
|
+
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(url));
|
|
|
+ requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + multiPart->boundary());
|
|
|
+ requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
+ QString auth = m_token;
|
|
|
+ requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
+
|
|
|
+ // 发送 post 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->post(requestInfo, multiPart);
|
|
|
+ multiPart->setParent(reply); // reply删除时会自动删除multiPart
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventloop;
|
|
|
+ connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
+ eventloop.exec();
|
|
|
+
|
|
|
+ QByteArray array;
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ QString strRes = QString::fromUtf8(result);
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+}
|
|
|
+
|
|
|
+QString HttpClient::getRequest()
|
|
|
+{
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+ QString url = "http://" + Config()->httpHost;
|
|
|
+ url = url + m_postUrl;
|
|
|
+ QString getJsonStr = "";
|
|
|
+ if(m_httpData != "{}")
|
|
|
+ {
|
|
|
+ // QString getJsonStr = "";
|
|
|
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(m_httpData);
|
|
|
+ if (!jsonDoc.isNull() && !jsonDoc.isEmpty() && jsonDoc.isObject()) {
|
|
|
+ QJsonObject jsonObj = jsonDoc.object();
|
|
|
+ for (const QString& key : jsonObj.keys()) {
|
|
|
+ QString value;
|
|
|
+ if (jsonObj.value(key).isString()) {
|
|
|
+ value = jsonObj.value(key).toString();
|
|
|
+ }
|
|
|
+ else if (jsonObj.value(key).isDouble()) {
|
|
|
+ value = QString::number(jsonObj.value(key).toDouble());
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ value = QString::number(jsonObj.value(key).toInt());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (getJsonStr.isEmpty()) {
|
|
|
+ getJsonStr = key + "=" + value;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ getJsonStr = getJsonStr + "&" + key + "=" + value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ url = url + "?" + getJsonStr;
|
|
|
+ }
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(url));
|
|
|
+ QString auth = m_token;
|
|
|
+ requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant_id", Config()->tenant_id.toUtf8());
|
|
|
+ // 发送 get 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->get(requestInfo);
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventloop;
|
|
|
+ connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
+ eventloop.exec();
|
|
|
+
|
|
|
+ QByteArray array;
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ QString strRes = QString::fromUtf8(result);
|
|
|
+ QStringList urlSplit = m_postUrl.split("/");
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+}
|
|
|
+
|
|
|
+QString HttpClient::putJsonRequest()
|
|
|
+{
|
|
|
+ // 获取当前日期和时间
|
|
|
+ QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
|
+ // qint64 timestampSeconds = currentDateTime.toSecsSinceEpoch();
|
|
|
+ QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
|
|
|
+
|
|
|
+ QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
|
|
|
+ QString url = "http://";
|
|
|
+ url = url + Config()->httpHost + m_postUrl;
|
|
|
+ // qDebug() << url;
|
|
|
+ // 设置头信息
|
|
|
+ QNetworkRequest requestInfo;
|
|
|
+ requestInfo.setUrl(QUrl(url));
|
|
|
+ requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
|
|
|
+ requestInfo.setRawHeader("Module", "Android_Material");
|
|
|
+ QString auth = m_token;
|
|
|
+ requestInfo.setRawHeader("Authorization", auth.toUtf8());
|
|
|
+ requestInfo.setRawHeader("tenant-id", Config()->tenant_id.toUtf8());
|
|
|
+
|
|
|
+ // 发送 put 请求
|
|
|
+ QNetworkReply* reply = pHttpMgr->put(requestInfo, m_httpData);
|
|
|
+
|
|
|
+ // 添加超时处理,1ms 超时
|
|
|
+ QEventLoop eventloop;
|
|
|
+ connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));
|
|
|
+
|
|
|
+ // 比如设置 1ms 内完成请求,否则就认为是超时
|
|
|
+ QTimer::singleShot(HTTP_REQUEST_TIMEOUT, &eventloop, &QEventLoop::quit);
|
|
|
+ eventloop.exec();
|
|
|
+
|
|
|
+ QByteArray array;
|
|
|
+ if(reply->isFinished()){
|
|
|
+ if (reply->error() == QNetworkReply::NoError) {
|
|
|
+ // 正常结束,读取响应数据
|
|
|
+ QByteArray result = reply->readAll();
|
|
|
+ QString strRes = QString::fromUtf8(result);
|
|
|
+
|
|
|
+ // qDebug() << "http post success post response=" << strRes;
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 异常结束
|
|
|
+ // 请求失败
|
|
|
+ QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
|
|
+
|
|
|
+ // qDebug() << "http post failed, error code = " << statusCode.toString() << " error info: " << reply->errorString();
|
|
|
+ QString strRes = "{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}";
|
|
|
+ reply->deleteLater();
|
|
|
+ return strRes;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 请求超时
|
|
|
+ disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
|
|
|
+ reply->abort();
|
|
|
+ // qDebug() << "http post timeout";
|
|
|
+ }
|
|
|
+
|
|
|
+ reply->deleteLater();
|
|
|
+
|
|
|
+ return "{\"code\":400,\"result\":\"failure\"}";
|
|
|
+}
|
|
|
+
|
|
|
+void HttpClient::slotPostRequestData(quint64 id, QString postUrl, QByteArray data, QByteArray file, QString token)
|
|
|
+{
|
|
|
+ qDebug() << "[HttpClient] slotPostRequestData 收到POST请求";
|
|
|
+ qDebug() << "[HttpClient] URL:" << postUrl;
|
|
|
+ qDebug() << "[HttpClient] 数据:" << QString::fromUtf8(data);
|
|
|
+
|
|
|
+ m_mutex.lock();
|
|
|
+ this->m_id = id;
|
|
|
+ this->m_postUrl = postUrl;
|
|
|
+ this->m_httpData = data;
|
|
|
+ this->m_httpFile = file;
|
|
|
+ this->m_token = token;
|
|
|
+ HttpClient::sToken = token;
|
|
|
+ if(!this->m_httpData.isNull() && !this->m_httpFile.isNull())
|
|
|
+ {
|
|
|
+ m_workStat = httpWorkStat::httpWorkFormdata;
|
|
|
+ }
|
|
|
+ else if(!this->m_httpData.isNull())
|
|
|
+ {
|
|
|
+ qDebug() << "[HttpClient] 开始执行postJsonRequest...";
|
|
|
+ QString res = postJsonRequest();
|
|
|
+ qDebug() << "[HttpClient] postJsonRequest完成,响应:" << res.left(200);
|
|
|
+ QByteArray bb = res.toUtf8();
|
|
|
+ m_mutex.unlock();
|
|
|
+
|
|
|
+ if(m_postUrl == Config()->usernameLogin_url) {
|
|
|
+ emit signalResponsePasswordLoginData(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->cardLogin_url) {
|
|
|
+ qDebug() << "[HttpClient] 发射signalResponseCardLoginData信号";
|
|
|
+ emit signalResponseCardLoginData(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->updateNodeApprovalUrl) {
|
|
|
+ emit signalResponseUpdateNodeApprovalUrl(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->uploadJobTicketUrl) {
|
|
|
+ emit signalResponseUploadJobTicket(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->uploadPositionInfoUrl) {
|
|
|
+ emit signalResponseUploadPositionInfo(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->updateUncolockUrl) {
|
|
|
+ emit signalResponseUpdateUncolock(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->updateColockUrl) {
|
|
|
+ emit signalResponseUpdateColock(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->updatePointUnlock) {
|
|
|
+ emit signalResponseUpdatePointUnlock(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->updateBackLock) {
|
|
|
+ emit signalResponseUpdateBackLock(bb);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(!this->m_httpFile.isNull())
|
|
|
+ {
|
|
|
+ m_workStat = httpWorkStat::httpWorkFormdata;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void HttpClient::slotGetRequestData(quint64 id, QString postUrl, QByteArray data, QString token)
|
|
|
+{
|
|
|
+ m_mutex.lock();
|
|
|
+ this->m_id = id;
|
|
|
+ this->m_postUrl = postUrl;
|
|
|
+ this->m_httpData = data;
|
|
|
+ this->m_token = token;
|
|
|
+ HttpClient::sToken = token;
|
|
|
+
|
|
|
+ QString res = getRequest();
|
|
|
+ QByteArray bb = res.toUtf8();
|
|
|
+ m_mutex.unlock();
|
|
|
+
|
|
|
+ if (m_postUrl == Config()->jobTicketsUrl) {
|
|
|
+ emit signalResponseGetJobTickets(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->workNodeDetail) {
|
|
|
+ emit signalResponseGetWorkNodeDetail(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->workNodeDetailForm) {
|
|
|
+ emit signalResponseGetFormById(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->userInfoUrl) {
|
|
|
+ emit signalResponseGetUserInfoUrl(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->keyMACByNFC) {
|
|
|
+ emit signalResponseGetKeyMAC(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->isolationPointById) {
|
|
|
+ emit signalResponseGetIsolationPointInfo(bb);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void HttpClient::slotPutRequestData(quint64 id, QString postUrl, QByteArray data, QByteArray file, QString token)
|
|
|
+{
|
|
|
+ m_mutex.lock();
|
|
|
+ this->m_id = id;
|
|
|
+ this->m_postUrl = postUrl;
|
|
|
+ this->m_httpData = data;
|
|
|
+ this->m_httpFile = file;
|
|
|
+ this->m_token = token;
|
|
|
+ HttpClient::sToken = token;
|
|
|
+ if(!this->m_httpData.isNull() && !this->m_httpFile.isNull())
|
|
|
+ {
|
|
|
+ m_workStat = httpWorkStat::httpWorkFormdata;
|
|
|
+ }
|
|
|
+ else if(!this->m_httpData.isNull())
|
|
|
+ {
|
|
|
+ QString res = putJsonRequest();
|
|
|
+ QByteArray bb = res.toUtf8();
|
|
|
+ m_mutex.unlock();
|
|
|
+
|
|
|
+ if(m_postUrl == Config()->updateUserInfoUrl) {
|
|
|
+ emit signalReponseUpdateUserInfoUrl(bb);
|
|
|
+ }
|
|
|
+ else if (m_postUrl == Config()->updatePasswordUrl) {
|
|
|
+ emit signalReponseUpdateUserPasswordUrl(bb);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void HttpClient::slotSetThreadStop()
|
|
|
+{
|
|
|
+ this->m_threadstatus = false;
|
|
|
+}
|