QT HTTP请求(get和post)+json解析

1、get
在这里插入图片描述

  QNetworkAccessManager *smsManager = new QNetworkAccessManager(this);
  QString url = "http://123.56.81.6:8080/api/smsCode";
  QNetworkRequest *Request = new QNetworkRequest(QUrl(url));
  Request ->setRawHeader(QByteArray("SESSION-ID"),_p->m_SessionID);
  QByteArray responseData;
  QEventLoop eventLoop;
  connect(smsManager , SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
  QNetworkReply* initReply = smsManager ->get(*Request );
  eventLoop.exec();       //block until finish
  responseData = initReply->readAll();

  //解析json
  QString imageData;//接收到服务器的base64数据是string类型
  QString txt;
  QJsonParseError json_error;
  QJsonDocument doucment = QJsonDocument::fromJson(responseData, &json_error);
  if (json_error.error == QJsonParseError::NoError) {
    if (doucment.isObject()) {
      const QJsonObject obj = doucment.object();
      qDebug() << obj;
      if (obj.contains("data")) {
        QJsonObject object_data = obj.value("data").toObject();
        if (object_data.contains("base64Image"))
        {
          imageData = object_data.value("base64Image").toString();
        }
        if (object_data.contains("text"))
        {
          txt = object_data.value("text").toString();
        }
      }
    }
  }

2、post
在这里插入图片描述

  QNetworkAccessManager *loginManager = new QNetworkAccessManager(this);
  QNetworkRequest *Request = new QNetworkRequest(QUrl("http://123.56.81.6:8080/api/user/login"));
  Request->setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
  Request->setRawHeader(QByteArray("SESSION-ID"), _p->m_SessionID);
  QByteArray responseData;
  QEventLoop eventLoop;
  connect(loginManager , SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

  QString user = ui.user->text();
  QString pass = ui.passwd->text();
  QString sms = ui.smscode->text();

  QJsonObject obj;
  obj.insert("password", pass);
  obj.insert("smsCode", sms);
  obj.insert("username", user);
  QByteArray byteArray = QJsonDocument(obj).toJson(QJsonDocument::Compact);
  QString str(byteArray);

  QNetworkReply* initReply = loginManager->post(*Request, str.toUtf8());
  eventLoop.exec();       //block until finish
  responseData = initReply->readAll();

  //解析json
  QJsonParseError json_error;
  QJsonDocument doucment = QJsonDocument::fromJson(responseData, &json_error);
  if (json_error.error == QJsonParseError::NoError) {
    if (doucment.isObject()) {
      const QJsonObject obj = doucment.object();
      qDebug() << obj;
      if (obj.contains("data")) {
        const QJsonObject obj_data = obj.value("data").toObject();
        if (obj_data.contains("token"))
        {
          QString token = obj_data.value("token").toString();
        }
        if (obj_data.contains("userId"))
        {
          int userID = obj_data.value("userId").toInt();
        }
      }
      if (obj.contains("message")) {
         QString loginMessage = obj.value("message").toString();
      }
      if (obj.contains("success")) {
        bool isSuccess = obj.value("success").toBool();
      }
    }
  }

3、总结
1、在请求时使用QEventLoop操作更加方便。
2、请求头使用setRawHeader函数
3、QJsonDocument(obj).toJson(QJsonDocument::Compact);这里一定要注意json格式
在这里插入图片描述

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值