QT的http post

QT += network

  

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QObject>
#include <QDebug>
#include <QHttpMultiPart>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QMetaObject>
#include <QEventLoop>
#include <QJsonDocument>            //以下是json数据传送所需头文件
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void finishedSlot(QNetworkReply*);
private:
    Ui::MainWindow *ui;



};
#endif // MAINWINDOW_H

  

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSslSocket>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

qDebug()<< QSslSocket::sslLibraryBuildVersionString();
    QNetworkAccessManager * net_mgr = new QNetworkAccessManager(this);
        connect(net_mgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*)));

        QNetworkRequest net_request;
        net_request.setUrl(QUrl("https://saas-0-core.0.cn/v1/fn_saas_core/req_rpc_cmd"));

    // 下边这行也很重要,要发送json格式的数据必须要在header里设置,不然不会成功的
        net_request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
        QJsonObject object;

        object.insert("cmd", "req_get_machine_info_iot_base_bu_mid");
        QJsonObject object2;
        object2.insert("mid", 9109513);
        object.insert("data", object2);
        QJsonDocument document=QJsonDocument(object);

        // 这里要将json格式的数据转换为QByteArray才行
        QByteArray post_data = document.toJson(QJsonDocument::Compact);
        net_mgr->post(net_request, post_data);


}

void MainWindow::finishedSlot(QNetworkReply* reply)
{
    if (reply->error() == QNetworkReply::NoError)
    {
        QByteArray bytes = reply->readAll();
        // 下边我们将收到的body部分解析为json格式,其中有个key是status
        QJsonDocument jsonDocument = QJsonDocument::fromJson(bytes);
        qDebug()<<jsonDocument;
        QJsonObject jsonObject = jsonDocument.object().find("data").value().toObject();
        QString value = jsonObject["productKey"].toString();
        qDebug()<<"PID:"<<value;


    }
    reply->deleteLater();
}


MainWindow::~MainWindow()
{
    delete ui;
}

  

posted @ 2023-06-12 16:34  ahuo  阅读(96)  评论(0编辑  收藏  举报