QtHttps.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "QtHttps.h"
  2. #include "lightlog.h"
  3. #include <QEventLoop>
  4. QtHttps::QtHttps(QObject *parent) :
  5. QObject(parent)
  6. {
  7. /* 初始化函数 */
  8. m_manager = new QNetworkAccessManager(this);
  9. /* 链接信号 */
  10. // connect(m_manager, &QNetworkAccessManager::finished, this, &QtHttps::do_replyFinished);
  11. }
  12. QtHttps::~QtHttps()
  13. {
  14. delete m_manager;
  15. }
  16. bool QtHttps::Get(const QString &url)
  17. {
  18. if(m_manager == nullptr)
  19. {
  20. LOG_WARN("m_manager is nullptr");
  21. return false;
  22. }
  23. QNetworkRequest request;
  24. request.setUrl(QUrl(url));
  25. /* 等待返回 */
  26. m_reply = m_manager->get(request);
  27. connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
  28. return true;
  29. }
  30. /* 获取请求头信息 */
  31. bool QtHttps::GetHead(const QString &url)
  32. {
  33. if(m_manager == nullptr)
  34. {
  35. LOG_WARN("m_manager is nullptr");
  36. return false;
  37. }
  38. QNetworkRequest request;
  39. request.setUrl(url);
  40. m_reply = m_manager->head(request);
  41. connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
  42. connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
  43. // connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
  44. return true;
  45. }
  46. void QtHttps::Post(const QString &url, const QByteArray &data)
  47. {
  48. }
  49. /* 下载文件 */
  50. void QtHttps::downloadFile(const QString &url, const QString &filePath)
  51. {
  52. if(m_manager == nullptr)
  53. {
  54. LOG_WARN("m_manager is nullptr");
  55. return;
  56. }
  57. /* 检查文件有效性 */
  58. m_file = new QFile(this);
  59. m_file->setFileName(filePath);
  60. if(!m_file->open(QIODevice::WriteOnly | QIODevice::Truncate))
  61. {
  62. LOG_WARN("open file failed , file path : " + filePath);
  63. m_file->close();
  64. delete m_file;
  65. m_file = nullptr;
  66. return;
  67. }
  68. /* 发送请求 */
  69. QNetworkRequest request;
  70. request.setUrl(QUrl(url));
  71. m_reply = m_manager->get(request);
  72. /* 链接信号 */
  73. connect(m_reply, &QNetworkReply::finished, this, &QtHttps::do_replyFinished);
  74. connect(m_reply, &QNetworkReply::readyRead, this, &QtHttps::do_replyReadyRead);
  75. connect(m_reply, &QNetworkReply::downloadProgress, this, &QtHttps::do_downloadProgress);
  76. }
  77. /* 请求完成的槽函数 */
  78. void QtHttps::do_replyFinished()
  79. {
  80. LOG_DEBUG("do_replyFinished");
  81. if(m_reply->error() == QNetworkReply::NoError)
  82. {
  83. LOG_DEBUG("reply success");
  84. auto list = m_reply->rawHeaderList();
  85. for(auto &item : list)
  86. {
  87. LOG_DEBUG(item + " : " + m_reply->rawHeader(item));
  88. }
  89. auto ret = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
  90. LOG_DEBUG("Status Code : " + QString::number(ret));
  91. }
  92. else
  93. {
  94. LOG_WARN("reply error : " + m_reply->errorString());
  95. }
  96. /* 记得设置这个,需要手动释放 */
  97. m_reply->deleteLater();
  98. m_reply = nullptr;
  99. }
  100. /* 读取数据 */
  101. void QtHttps::do_replyReadyRead()
  102. {
  103. LOG_DEBUG("do_replyReadyRead");
  104. if(m_file != nullptr)
  105. {
  106. m_file->write(m_reply->readAll());
  107. }
  108. }
  109. /* 下载进度 */
  110. void QtHttps::do_downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
  111. {
  112. LOG_DEBUG("do_downloadProgress");
  113. LOG_DEBUG("bytesReceived : " + QString::number(bytesReceived));
  114. LOG_DEBUG("bytesTotal : " + QString::number(bytesTotal));
  115. }