httprequest.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "httprequest.h"
  2. #include <QUrl>
  3. #include <QJsonParseError>
  4. #include <QNetworkReply>
  5. HttpRequest::HttpRequest(QObject *parent) : QObject(parent)
  6. {
  7. connect(&_manager, &QNetworkAccessManager::finished, this, &HttpRequest::finishRequest);
  8. }
  9. void HttpRequest::get(const QString & url)
  10. {
  11. QNetworkRequest req;
  12. req.setUrl(QUrl(url));
  13. initRequest(req);
  14. _manager.get(req);
  15. }
  16. void HttpRequest::post(const QString & url, const QJsonObject & body)
  17. {
  18. QNetworkRequest req;
  19. initRequest(req, 1);
  20. req.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
  21. _manager.post(req, QJsonDocument(body).toJson());
  22. }
  23. void HttpRequest::post(const QString & url, const QMap<QString, QString> &body)
  24. {
  25. QNetworkRequest req;
  26. QHttpMultiPart * part = new QHttpMultiPart();
  27. part->setContentType(QHttpMultiPart::FormDataType);
  28. req.setUrl(QUrl(url));
  29. initRequest(req, 1);
  30. auto v = QString("multipart/form-data;boundary=%1").arg(QString(part->boundary()));
  31. req.setHeader(QNetworkRequest::ContentTypeHeader,v);
  32. initMultiPart(*part, body);
  33. auto rep = _manager.post(req, part);
  34. part->setParent(rep);
  35. }
  36. //void HttpRequest::post(const QString & url,const QMap<QString,QVariant> body)
  37. //{
  38. //// qDebug()<<body;
  39. // QNetworkRequest req;
  40. // QHttpMultiPart * part = new QHttpMultiPart();
  41. // part->setContentType(QHttpMultiPart::FormDataType);
  42. // req.setUrl(QUrl(url));
  43. // initRequest(req, 1);
  44. // auto v = QString("multipart/form-data;boundary=%1").arg(QString(part->boundary()));
  45. // req.setHeader(QNetworkRequest::ContentTypeHeader,v);
  46. // initMultiPart(*part, body);
  47. // auto rep = _manager.post(req, part);
  48. // part->setParent(rep);
  49. //}
  50. void HttpRequest::finishRequest(QNetworkReply * reply)
  51. {
  52. if (reply->error()){
  53. qDebug()<<"Error!"<<endl;
  54. emit result(500, QJsonObject());
  55. }else{
  56. QByteArray byte_array = reply->readAll();
  57. QJsonParseError json_error;
  58. QJsonDocument parse_document = QJsonDocument::fromJson(byte_array, &json_error);
  59. if(json_error.error == QJsonParseError::NoError)
  60. {
  61. if(parse_document.isObject())
  62. {
  63. emit result(200, parse_document.object());
  64. reply->deleteLater();
  65. return;
  66. }
  67. }
  68. emit result(200, QJsonObject());
  69. }
  70. reply->deleteLater();
  71. }
  72. void HttpRequest::initRequest(QNetworkRequest & req, bool post)
  73. {
  74. // if(!_aid.isEmpty()){
  75. req.setRawHeader("Auid",QString::number(GlobalInfo::this_()->user().accountId).toUtf8());
  76. req.setRawHeader("Access-Token",GlobalInfo::this_()->user().acessToken.toUtf8());
  77. // }
  78. // if(post)
  79. // {
  80. // req.setHeader(QNetworkRequest::ContentTypeHeader,"multipart/form-data");
  81. // }
  82. }
  83. void HttpRequest::initMultiPart(QHttpMultiPart & part,const QMap<QString,QString> body)
  84. {
  85. for(auto begin = body.begin(); begin != body.end(); ++begin){
  86. QHttpPart textPart;
  87. textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QString("form-data; name=\"%1\"").arg(begin.key()));
  88. textPart.setBody(begin.value().toUtf8());
  89. part.append(textPart);
  90. }
  91. }
  92. //void HttpRequest::initMultiPart(QHttpMultiPart & part,const QMap<QString,QVariant> body)
  93. //{
  94. // for(auto begin = body.begin(); begin != body.end(); ++begin){
  95. // QHttpPart textPart;
  96. // textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QString("form-data; name=\"%1\"").arg(begin.key()));
  97. // if(begin.value().typeName()=="QString")
  98. // {
  99. // textPart.setBody(begin.value().toString().toUtf8());
  100. // }
  101. // else
  102. // {
  103. // textPart.setBody(begin.value().toByteArray());
  104. // }
  105. // part.append(textPart);
  106. // }
  107. //}