1. 程式人生 > 其它 >qt傳送https請求,遮蔽ssl證書

qt傳送https請求,遮蔽ssl證書

//.h

#ifndef HTTPCOMMUNICATION_H
#define HTTPCOMMUNICATION_H

#include <QObject>
#include <QNetworkAccessManager>

/****************************************************************/

class HttpCommunication : public QObject
{
Q_OBJECT

public:
/****************************************************************/
HttpCommunication(QObject *parent = nullptr);
~HttpCommunication();
/****************************************************************/
public:
static HttpCommunication& GetInstance();
void SetHttpInfo(QString strPlatformIp,QString strToken,QString strUser); //設定平臺資訊 strPlatformIp:http://ip:port
QString GetRequestData(QString strUrl);
QString PostRequestFindCases(int nPagNo,int nPagesize); //根據相關條件查詢--獲取所有案件資訊-可以案件和房間號組合作為名稱
QString GetRequestGetCamera(int nPagNo, int nPagesize,QString strParenrIndex); //根據房間資訊獲取當前房間下的監控點
QString GetConfigUiUrl(); //獲取前端配置介面的url,放到客戶端展示
private:
QNetworkAccessManager* m_qNetWork; //定義
QString m_strPlatformIp; //平臺Ip和埠
QString m_strToken; //token值
QString m_strCurrentUser; //當前客戶端登陸使用者
};

#endif // HTTPCOMMUNICATION_H

//cpp

#include <QJsonObject>
#include <QJsonDocument>
#include <QEventLoop>
#include <QNetworkReply>

#include "Httpcommunication.h"
#include "../LogDefinition.h"

/****************************************************************/
HttpCommunication::HttpCommunication(QObject *parent)
: QObject(parent)
{
m_qNetWork = nullptr;
m_qNetWork = new QNetworkAccessManager(this); //分配控制元件
}

HttpCommunication::~HttpCommunication()
{

}
/****************************************************************/
/****************************************************************/
/**********************public************************************/
/****************************************************************/
HttpCommunication& HttpCommunication::GetInstance()
{
static HttpCommunication instance;
return instance;
}
void HttpCommunication::SetHttpInfo(QString strPlatformIp, QString strToken, QString strUser)
{
m_strPlatformIp = strPlatformIp;
m_strToken = strToken;
m_strCurrentUser = strUser;
}
QString HttpCommunication::GetRequestData(QString strUrl)
{
return "";
}

QString HttpCommunication::PostRequestFindCases(int nPagNo, int nPagesize)
{
if (m_qNetWork == nullptr)
m_qNetWork = new QNetworkAccessManager(this);

//1、組裝url
QString strUrl = QString("%1/sphfkssjpz/api/v1/findCases").arg(m_strPlatformIp);
DRV_LOG_INFO("PostRequestFindCases strUrl = %s", strUrl.toStdString().c_str());
//2、組裝JSON
QByteArray postData;
QJsonObject jsonObject;
jsonObject.insert("userId", m_strCurrentUser);
jsonObject.insert("caseName", "");
jsonObject.insert("endTime", "");
jsonObject.insert("pageNo", nPagNo);
jsonObject.insert("pageSize", nPagesize);
jsonObject.insert("personName", "");
jsonObject.insert("regionName", "");
jsonObject.insert("startTime", "");
QString sData = QJsonDocument(jsonObject).toJson();
postData.append(sData);

DRV_LOG_INFO("PostRequestFindCases sData = %s", sData.toStdString().c_str());

QNetworkRequest objRequest;
QSslConfiguration sslConfig;
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfig.setProtocol(QSsl::TlsV1SslV3);
objRequest.setSslConfiguration(sslConfig);

objRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
objRequest.setHeader(QNetworkRequest::ContentLengthHeader, postData.length());
//objRequest.setRawHeader("token", m_strToken.toUtf8());
objRequest.setUrl(QUrl(strUrl));

//傳送請求及獲取資料
QNetworkReply *reply = m_qNetWork->post(objRequest, postData);
QEventLoop eventloop;
QObject::connect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
eventloop.exec(QEventLoop::ExcludeUserInputEvents);
QByteArray strRecvArray = reply->readAll();
reply->deleteLater();
QString strRecv(strRecvArray);

return strRecv;
}
QString HttpCommunication::GetRequestGetCamera(int nPagNo, int nPagesize,QString strParenrIndex)
{
if (m_qNetWork == nullptr)
m_qNetWork = new QNetworkAccessManager(this);

//1、組裝url
QString strUrl = QString("%1/sphfkssjpz/api/v1/getResourcesByIndexCode?userId=%2&parentIndexCodes=%3&pageNo=%4&pageSize=%5").
arg(m_strPlatformIp).arg(m_strCurrentUser).arg(strParenrIndex).arg(QString::number(nPagNo)).arg(QString::number(nPagesize));
DRV_LOG_INFO("GetRequestGetCamera strUrl = %s", strUrl.toStdString().c_str());
//2、傳送get請求
QNetworkRequest objRequest;

QSslConfiguration sslConfig;
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfig.setProtocol(QSsl::TlsV1SslV3);
objRequest.setSslConfiguration(sslConfig);

objRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
objRequest.setRawHeader("token", m_strToken.toUtf8());
objRequest.setUrl(QUrl(strUrl));

//傳送請求及獲取資料
QNetworkReply *reply = m_qNetWork->get(objRequest);
QEventLoop eventloop;
QObject::connect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
eventloop.exec(QEventLoop::ExcludeUserInputEvents);
QByteArray strRecvArray = reply->readAll();
reply->deleteLater();
QString strRecv(strRecvArray);

return strRecv;
}
/*************
{
"type":0,
"code":"0",
"msg":"操作成功",
"data":{
"url1":"value1",
"url2":"value2"
}
}
*************/
QString HttpCommunication::GetConfigUiUrl()
{
if (m_qNetWork == nullptr)
m_qNetWork = new QNetworkAccessManager(this);
//1、組裝url
QString strUrl = QString("%1/sphfkssjpz/api/v1/getPageVisitUrl").arg(m_strPlatformIp);//https://10.196.1.62:1443/sphfkssjpz/api/v1/getPageVisitUrl
DRV_LOG_INFO("GetConfigUiUrl strUrl = %s", strUrl.toStdString().c_str());
//2、傳送get請求
QNetworkRequest objRequest;

QSslConfiguration sslConfig;
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfig.setProtocol(QSsl::TlsV1SslV3);
objRequest.setSslConfiguration(sslConfig);

objRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
objRequest.setRawHeader("token", m_strToken.toUtf8());
objRequest.setUrl(QUrl(strUrl));

//傳送請求及獲取資料
QNetworkReply *reply = m_qNetWork->get(objRequest);
QEventLoop eventloop;
QObject::connect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
eventloop.exec(QEventLoop::ExcludeUserInputEvents);
QByteArray strRecvArray = reply->readAll();
reply->deleteLater();
QString strRecv(strRecvArray);

//3、解析返回過來的URL
QJsonDocument document = QJsonDocument::fromJson(strRecv.toUtf8().data());
QJsonObject jsonObjectResult = document.object();
QString strCode = jsonObjectResult["code"].toString();
QString strMsg = jsonObjectResult["msg"].toString();

QJsonObject jsonObjectData = jsonObjectResult["data"].toObject();

QStringList strUrlList;
for (int i = 0; i < jsonObjectData.size(); i++)
{
QString strKeyUrl = QString("url%1").arg(QString::number(i + 1));
QString strConfigUrl = jsonObjectData[strKeyUrl].toString();
strUrlList.append(strConfigUrl);
}
DRV_LOG_INFO("GetConfigUiUrl strUrlList[0] = %s", strUrlList[0].toStdString().c_str());

return strUrlList[0];
}
/****************************************************************/
/**********************protected*********************************/
/****************************************************************/

/****************************************************************/
/**********************private***********************************/
/****************************************************************/