|
@@ -3,6 +3,7 @@
|
|
#include "lightlog.h"
|
|
#include "lightlog.h"
|
|
|
|
|
|
#include <QEventLoop>
|
|
#include <QEventLoop>
|
|
|
|
+#include "spdlog/spdlog.h"
|
|
|
|
|
|
QtHttps::QtHttps(QObject *parent) :
|
|
QtHttps::QtHttps(QObject *parent) :
|
|
QObject(parent)
|
|
QObject(parent)
|
|
@@ -11,13 +12,40 @@ QtHttps::QtHttps(QObject *parent) :
|
|
m_manager = new QNetworkAccessManager(this);
|
|
m_manager = new QNetworkAccessManager(this);
|
|
|
|
|
|
|
|
|
|
- /* 链接信号 */
|
|
|
|
- // connect(m_manager, &QNetworkAccessManager::finished, this, &QtHttps::do_replyFinished);
|
|
|
|
|
|
+ /* 检查是否支持OpenSSL */
|
|
|
|
+ bool isSupport = QSslSocket::supportsSsl();
|
|
|
|
+ QString opensslVersion = QSslSocket::sslLibraryVersionString();
|
|
|
|
+ QString openSSLBuildVersion = QSslSocket::sslLibraryBuildVersionString();
|
|
|
|
+ LOG_INFO("OpenSSL is support : " + QString::number(isSupport));
|
|
|
|
+ LOG_INFO("OpenSSL version : " + opensslVersion);
|
|
|
|
+ LOG_INFO("OpenSSL build version : " + openSSLBuildVersion);
|
|
|
|
+ /* 查看支持的协议 */
|
|
|
|
+ auto list = m_manager->supportedSchemes();
|
|
|
|
+ for(auto &item : list)
|
|
|
|
+ {
|
|
|
|
+ LOG_INFO("supportedSchemes : " + item);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|
|
QtHttps::~QtHttps()
|
|
QtHttps::~QtHttps()
|
|
{
|
|
{
|
|
delete m_manager;
|
|
delete m_manager;
|
|
|
|
+ if(m_file != nullptr)
|
|
|
|
+ {
|
|
|
|
+ if(m_file->isOpen())
|
|
|
|
+ {
|
|
|
|
+ m_file->close();
|
|
|
|
+ }
|
|
|
|
+ delete m_file;
|
|
|
|
+ m_file = nullptr;
|
|
|
|
+ }
|
|
|
|
+ if(m_reply != nullptr)
|
|
|
|
+ {
|
|
|
|
+ m_reply->deleteLater();
|
|
|
|
+ m_reply = nullptr;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
bool QtHttps::Get(const QString &url)
|
|
bool QtHttps::Get(const QString &url)
|
|
@@ -33,6 +61,13 @@ bool QtHttps::Get(const QString &url)
|
|
|
|
|
|
m_reply = m_manager->get(request);
|
|
m_reply = m_manager->get(request);
|
|
connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
|
|
connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
|
|
|
|
+ connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
|
|
|
|
+ connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
|
|
|
|
+
|
|
|
|
+ /* 转发信号 */
|
|
|
|
+ connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::signal_downloadProgress);
|
|
|
|
+ connect(m_reply, &QNetworkReply::finished, this, &QtHttps::signal_replyFinished);
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -45,6 +80,12 @@ bool QtHttps::GetHead(const QString &url)
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
QNetworkRequest request;
|
|
QNetworkRequest request;
|
|
|
|
+
|
|
|
|
+ // QSslConfiguration conf = request.sslConfiguration();
|
|
|
|
+ // conf.setPeerVerifyMode(QSslSocket::VerifyNone);
|
|
|
|
+ // conf.setProtocol(QSsl::TlsV1SslV3);
|
|
|
|
+ // request.setSslConfiguration(conf);
|
|
|
|
+
|
|
request.setUrl(url);
|
|
request.setUrl(url);
|
|
|
|
|
|
m_reply = m_manager->head(request);
|
|
m_reply = m_manager->head(request);
|
|
@@ -52,6 +93,10 @@ bool QtHttps::GetHead(const QString &url)
|
|
connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
|
|
connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
|
|
// connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
|
|
// connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
|
|
|
|
|
|
|
|
+ /* 转发信号 */
|
|
|
|
+ connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::signal_downloadProgress);
|
|
|
|
+ connect(m_reply, &QNetworkReply::finished, this, &QtHttps::signal_replyFinished);
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -84,10 +129,14 @@ void QtHttps::downloadFile(const QString &url, const QString &filePath)
|
|
QNetworkRequest request;
|
|
QNetworkRequest request;
|
|
request.setUrl(QUrl(url));
|
|
request.setUrl(QUrl(url));
|
|
m_reply = m_manager->get(request);
|
|
m_reply = m_manager->get(request);
|
|
- /* 链接信号 */
|
|
|
|
|
|
+ /* 链接信号和槽 */
|
|
connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
|
|
connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
|
|
connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
|
|
connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
|
|
connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
|
|
connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
|
|
|
|
+
|
|
|
|
+ /* 转发信号 */
|
|
|
|
+ connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::signal_downloadProgress);
|
|
|
|
+ connect(m_reply, &QNetworkReply::finished, this, &QtHttps::signal_replyFinished);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -95,22 +144,41 @@ void QtHttps::downloadFile(const QString &url, const QString &filePath)
|
|
void QtHttps::do_replyFinished()
|
|
void QtHttps::do_replyFinished()
|
|
{
|
|
{
|
|
LOG_DEBUG("do_replyFinished");
|
|
LOG_DEBUG("do_replyFinished");
|
|
-
|
|
|
|
|
|
+ /* 获取状态码 */
|
|
|
|
+ auto retCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
if(m_reply->error() == QNetworkReply::NoError)
|
|
if(m_reply->error() == QNetworkReply::NoError)
|
|
{
|
|
{
|
|
- LOG_DEBUG("reply success");
|
|
|
|
|
|
+ LOG_DEBUG("reply : " + QString::number(retCode));
|
|
auto list = m_reply->rawHeaderList();
|
|
auto list = m_reply->rawHeaderList();
|
|
for(auto &item : list)
|
|
for(auto &item : list)
|
|
{
|
|
{
|
|
- LOG_DEBUG(item + " : " + m_reply->rawHeader(item));
|
|
|
|
|
|
+ SPDLOG_INFO("{} : {}", item.toStdString(), m_reply->rawHeader(item).toStdString());
|
|
|
|
+ // LOG_DEBUG(item + " : " + m_reply->rawHeader(item));
|
|
|
|
+ }
|
|
|
|
+ /* 检查文件是否打开 */
|
|
|
|
+ if(m_file != nullptr)
|
|
|
|
+ {
|
|
|
|
+ if(m_file->isOpen())
|
|
|
|
+ {
|
|
|
|
+ m_file->close();
|
|
|
|
+ }
|
|
|
|
+ delete m_file;
|
|
|
|
+ m_file = nullptr;
|
|
}
|
|
}
|
|
-
|
|
|
|
- auto ret = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
|
|
- LOG_DEBUG("Status Code : " + QString::number(ret));
|
|
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- LOG_WARN("reply error : " + m_reply->errorString());
|
|
|
|
|
|
+ LOG_WARN("reply error : " + QString::number(retCode) + " " + m_reply->errorString());
|
|
|
|
+ }
|
|
|
|
+ /* 检查文件是否打开 */
|
|
|
|
+ if(m_file != nullptr)
|
|
|
|
+ {
|
|
|
|
+ if(m_file->isOpen())
|
|
|
|
+ {
|
|
|
|
+ m_file->close();
|
|
|
|
+ }
|
|
|
|
+ delete m_file;
|
|
|
|
+ m_file = nullptr;
|
|
}
|
|
}
|
|
/* 记得设置这个,需要手动释放 */
|
|
/* 记得设置这个,需要手动释放 */
|
|
m_reply->deleteLater();
|
|
m_reply->deleteLater();
|
|
@@ -120,7 +188,7 @@ void QtHttps::do_replyFinished()
|
|
/* 读取数据 */
|
|
/* 读取数据 */
|
|
void QtHttps::do_replyReadyRead()
|
|
void QtHttps::do_replyReadyRead()
|
|
{
|
|
{
|
|
- LOG_DEBUG("do_replyReadyRead");
|
|
|
|
|
|
+ // LOG_DEBUG("do_replyReadyRead");
|
|
if(m_file != nullptr)
|
|
if(m_file != nullptr)
|
|
{
|
|
{
|
|
m_file->write(m_reply->readAll());
|
|
m_file->write(m_reply->readAll());
|
|
@@ -134,3 +202,9 @@ void QtHttps::do_downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
|
|
LOG_DEBUG("bytesReceived : " + QString::number(bytesReceived));
|
|
LOG_DEBUG("bytesReceived : " + QString::number(bytesReceived));
|
|
LOG_DEBUG("bytesTotal : " + QString::number(bytesTotal));
|
|
LOG_DEBUG("bytesTotal : " + QString::number(bytesTotal));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+void QtHttps::do_error(QNetworkReply::NetworkError code)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+}
|