#include "QtHttps.h" #include "lightlog.h" #include QtHttps::QtHttps(QObject *parent) : QObject(parent) { /* 初始化函数 */ m_manager = new QNetworkAccessManager(this); /* 链接信号 */ // connect(m_manager, &QNetworkAccessManager::finished, this, &QtHttps::do_replyFinished); } QtHttps::~QtHttps() { delete m_manager; } 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); return true; } /* 获取请求头信息 */ bool QtHttps::GetHead(const QString &url) { if(m_manager == nullptr) { LOG_WARN("m_manager is nullptr"); return false; } QNetworkRequest request; 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); 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); } /* 请求完成的槽函数 */ void QtHttps::do_replyFinished() { LOG_DEBUG("do_replyFinished"); if(m_reply->error() == QNetworkReply::NoError) { LOG_DEBUG("reply success"); auto list = m_reply->rawHeaderList(); for(auto &item : list) { LOG_DEBUG(item + " : " + m_reply->rawHeader(item)); } auto ret = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); LOG_DEBUG("Status Code : " + QString::number(ret)); } else { LOG_WARN("reply error : " + m_reply->errorString()); } /* 记得设置这个,需要手动释放 */ 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)); }