123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- #include "QtHttps.h"
- #include "lightlog.h"
- #include <QEventLoop>
- #include "spdlog/spdlog.h"
- QtHttps::QtHttps(QObject *parent) :
- QObject(parent)
- {
- /* 初始化函数 */
- m_manager = new QNetworkAccessManager(this);
- /* 检查是否支持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()
- {
- 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)
- {
- if(m_manager == nullptr)
- {
- LOG_WARN("m_manager is nullptr");
- return false;
- }
- QNetworkRequest request;
- request.setUrl(QUrl(url));
- /* 等待返回 */
-
- m_reply = m_manager->get(request);
- 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;
- }
- /* 获取请求头信息 */
- bool QtHttps::GetHead(const QString &url)
- {
- if(m_manager == nullptr)
- {
- LOG_WARN("m_manager is nullptr");
- return false;
- }
- QNetworkRequest request;
- // QSslConfiguration conf = request.sslConfiguration();
- // conf.setPeerVerifyMode(QSslSocket::VerifyNone);
- // conf.setProtocol(QSsl::TlsV1SslV3);
- // request.setSslConfiguration(conf);
- request.setUrl(url);
- m_reply = m_manager->head(request);
- 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;
- }
- void QtHttps::Post(const QString &url, const QByteArray &data)
- {
- }
- /* 下载文件 */
- void QtHttps::downloadFile(const QString &url, const QString &filePath)
- {
- if(m_manager == nullptr)
- {
- LOG_WARN("m_manager is nullptr");
- return;
- }
- /* 检查文件有效性 */
- m_file = new QFile(this);
- m_file->setFileName(filePath);
- if(!m_file->open(QIODevice::WriteOnly | QIODevice::Truncate))
- {
- LOG_WARN("open file failed , file path : " + filePath);
- m_file->close();
- delete m_file;
- m_file = nullptr;
- return;
- }
- /* 发送请求 */
- QNetworkRequest request;
- request.setUrl(QUrl(url));
- m_reply = m_manager->get(request);
- /* 链接信号和槽 */
- 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);
- }
- /* 请求完成的槽函数 */
- void QtHttps::do_replyFinished()
- {
- LOG_DEBUG("do_replyFinished");
- /* 获取状态码 */
- auto retCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
- if(m_reply->error() == QNetworkReply::NoError)
- {
- LOG_DEBUG("reply : " + QString::number(retCode));
- auto list = m_reply->rawHeaderList();
- for(auto &item : list)
- {
- 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;
- }
- }
- else
- {
- 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 = nullptr;
- }
- /* 读取数据 */
- void QtHttps::do_replyReadyRead()
- {
- // LOG_DEBUG("do_replyReadyRead");
- if(m_file != nullptr)
- {
- m_file->write(m_reply->readAll());
- }
- }
- /* 下载进度 */
- void QtHttps::do_downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
- {
- LOG_DEBUG("do_downloadProgress");
- LOG_DEBUG("bytesReceived : " + QString::number(bytesReceived));
- LOG_DEBUG("bytesTotal : " + QString::number(bytesTotal));
- }
- void QtHttps::do_error(QNetworkReply::NetworkError code)
- {
- }
|