httpclient.cpp 3.7 KB

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