QT开发中文网

Qt C++ 实现http 客户端 请求地址10.29.3.110:7022/jeecg-boot/360check/tServerCameraConfig/getServerCameraConfig 请求方式:get 请求参数:无 返回参数示例: { "success": true, "message": "操作成功!", "code": 200, "result": [ { "id": 2, "serverName": "11", /...

在 Qt C++ 中实现一个 HTTP 客户端以发送 GET 请求并接收 JSON 响应可以使用 QNetworkAccessManager。以下是一个简单的示例,演示如何请求指定的 URL 并处理返回的数据。

示例代码

确保您的 Qt 项目文件(.pro)中包含了 network 模块:

QT += core network

然后,在您的 C++ 源文件中,可以按照下面的方式实现 HTTP GET 请求:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QObject>

class HttpClient : public QObject {
    Q_OBJECT

public:
    HttpClient() {
        // 创建网络访问管理器
        manager = new QNetworkAccessManager(this);

        // 设置请求的 URL
        QUrl url("http://10.29.3.110:7022/jeecg-boot/360check/tServerCameraConfig/getServerCameraConfig");
        QNetworkRequest request(url);
        
        // 发送 GET 请求
        reply = manager->get(request);

        // 连接信号和槽
        connect(reply, &QNetworkReply::finished, this, &HttpClient::onResponseReceived);
    }

private slots:
    void onResponseReceived() {
        if (reply->error() == QNetworkReply::NoError) {
            QByteArray responseData = reply->readAll();
            parseResponse(responseData);
        } else {
            qWarning() << "Error:" << reply->errorString();
        }
        
        reply->deleteLater();  // 清理回复对象
    }

private:
    void parseResponse(const QByteArray &data) {
        // 将响应数据解析为 JSON 对象
        QJsonDocument jsonDoc = QJsonDocument::fromJson(data);
        
        if (jsonDoc.isNull()) {
            qWarning() << "Failed to create JSON doc.";
            return;
        }

        QJsonObject jsonObj = jsonDoc.object();
        
        // 获取字段值,例如 success, message 等等
        bool success = jsonObj["success"].toBool();
        QString message = jsonObj["message"].toString();
        
        qDebug() << "Success:" << success;
        qDebug() << "Message:" << message;

        if (jsonObj.contains("result")) {
            QJsonArray resultArray = jsonObj["result"].toArray();
            for (const auto &item : resultArray) {
                QJsonObject serverInfo = item.toObject();

                int id = serverInfo["id"].toInt();
                QString serverName = serverInfo["serverName"].toString();
                QString serverAddress = serverInfo["serverAddress"].toString();
                QString camera = serverInfo["camera"].toString();

                qDebug() << "ID:" << id;
                qDebug() << "Server Name:" << serverName;
                qDebug() << "Server Address:" << serverAddress;
                qDebug() << "Camera:" << camera;
            }
        }

       // 可以根据需要继续处理其他字段,比如 timestamp 等等。
    }

private:
    QNetworkAccessManager *manager;
    QNetworkReply *reply;
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
    
    HttpClient client;  // 创建 HTTP 客户端实例
    
    return a.exec();  // 启动事件循环
}

#include "main.moc"

代码说明

  1. HttpClient 类:封装了所有与网络相关的逻辑。

  2. 构造函数

    • 创建 QNetworkAccessManager 实例。
    • 设置目标 URL,并发起 GET 请求。
    • 连接请求完成信号到 onResponseReceived() 槽。
  3. onResponseReceived 函数

    • 检查是否有错误。如果没有,则读取响应数据并调用 parseResponse() 函数解析 JSON 数据。
    • 如果有错误,输出错误信息。
  4. parseResponse 函数

    • 使用 QJsonDocument 来解析 JSON 数据。
    • 从 JSON 对象中提取所需的信息,并通过调试信息输出。
  5. 主函数:创建一个 HttpClient 实例并启动事件循环。

注意事项

  • 确保网络可达性,并且目标服务器能够正常响应请求。
  • 根据需要添加适当的异常处理,以确保程序在出错时不会崩溃。
  • 如果您正在使用 Qt 的 GUI 应用程序,请考虑将类改为继承自 QWidget 或 QObject,而不是直接使用控制台应用程序。


    内容由零声教学AI助手提供,问题来源于学员提问
目录导航
  • 示例代码
  • 代码说明
  • 注意事项
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=13327

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?