httpclient.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "httpClient.h"
  2. #include <QDebug>
  3. #include <QJsonArray>
  4. #include <QJsonDocument>
  5. #include <QJsonObject>
  6. #include <QNetworkReply>
  7. // HttpClient 类的实现
  8. HttpClient::HttpClient(QObject *parent) : QObject(parent), m_networkManager(new QNetworkAccessManager(this)) {
  9. // 构造函数中可以初始化一些变量或设置默认值
  10. }
  11. void HttpClient::sendHttpGetRequest(const QUrl &url) {
  12. QNetworkRequest request(url);
  13. m_currenturl = url;
  14. QNetworkReply *reply = m_networkManager->get(request);
  15. if (!reply) {
  16. emit httpErrorOccurred("Failed to create network reply");
  17. } else {
  18. // qDebug() << "Network reply created successfully.";
  19. }
  20. connect(reply, &QNetworkReply::finished, this, &HttpClient::onGetFinished);
  21. // connect(reply, &QNetworkReply::errorOccurred, this, &HttpClient::onNetworkError);
  22. // connect(reply, &QNetworkReply::sslErrors, this, &HttpClient::onSslErrors);
  23. }
  24. void HttpClient::onGetFinished() {
  25. QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
  26. if (reply) {
  27. if (reply->error() == QNetworkReply::NoError) {
  28. QByteArray responseData = reply->readAll();
  29. QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData);
  30. if (jsonDoc.isNull()) {
  31. qDebug() << "Failed to parse JSON!";
  32. return;
  33. } else {
  34. emit httpGetFinished(jsonDoc, m_currenturl); // 发出信号通知外部处理
  35. }
  36. } else {
  37. emit httpErrorOccurred(reply->errorString()); // 发出信号通知外部错误
  38. }
  39. // 确保释放 reply 对象
  40. reply->deleteLater();
  41. }
  42. }
  43. void HttpClient::sendHttpGetAddress(const QUrl &url) {
  44. QNetworkRequest request(url);
  45. m_currenturl2 = url;
  46. QNetworkReply *reply = m_networkManager->get(request);
  47. if (!reply) {
  48. emit httpErrorOccurred("Failed to create network reply");
  49. } else {
  50. // qDebug() << "Network reply created successfully.";
  51. }
  52. connect(reply, &QNetworkReply::finished, this, &HttpClient::onGetAddress);
  53. // connect(reply, &QNetworkReply::errorOccurred, this, &HttpClient::onNetworkError);
  54. // connect(reply, &QNetworkReply::sslErrors, this, &HttpClient::onSslErrors);
  55. }
  56. void HttpClient::onGetAddress() {
  57. QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
  58. if (reply) {
  59. if (reply->error() == QNetworkReply::NoError) {
  60. QByteArray responseData = reply->readAll();
  61. QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData);
  62. if (jsonDoc.isNull()) {
  63. return;
  64. } else {
  65. // 可以进一步处理响应数据,比如解析 JSON 或 XML
  66. emit httpGetFinished(jsonDoc, m_currenturl2); // 发出信号通知外部处理
  67. }
  68. } else {
  69. // 处理请求错误
  70. // qDebug() << "GET Error:" << reply->errorString();
  71. emit httpErrorOccurred(reply->errorString()); // 发出信号通知外部错误
  72. }
  73. reply->deleteLater();
  74. }
  75. }
  76. void HttpClient::onNetworkError(QNetworkReply::NetworkError error) {
  77. QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
  78. if (reply) {
  79. emit httpErrorOccurred(reply->errorString());
  80. }
  81. }
  82. void HttpClient::onSslErrors(const QList<QSslError> &errors) {
  83. QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
  84. if (reply) {
  85. QString errorString;
  86. for (const QSslError &error : errors) {
  87. if (!errorString.isEmpty()) {
  88. errorString += ", ";
  89. }
  90. errorString += error.errorString();
  91. }
  92. emit httpErrorOccurred(errorString);
  93. // reply->ignoreSslErrors();
  94. }
  95. }