C++ QT QNetworkAccessManager 基操

QNetworkAccessManager是Qt用于管理网络访问的类,支持HTTP、FTP等协议。它能发送GET、POST请求,处理响应和cookie。文中提供了发送GET和POST请求的代码示例。

    QNetworkAccessManager 是 Qt 框架中的一个类,用于管理网络访问。它提供了一种简单的方式来发送网络请求和接收响应,并支持多种协议,如 HTTP、FTP、HTTPS 等。QNetworkAccessManager 可以用于下载文件、发送 POST 请求、处理 cookie 等。它是 Qt 网络模块中的一个核心类,常用于开发基于网络的应用程序。
    使用 QNetworkAccessManager 可以分为以下几个步骤:

    1. 创建 QNetworkAccessManager 实例
     
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
     
    2. 创建请求
     
    QUrl url("http://example.com");
    QNetworkRequest request(url);
     
    3. 发送请求
     
    QNetworkReply *reply = manager->get(request);
     
    4. 处理响应
     
    connect(reply, &QNetworkReply::finished, this, [reply]() {
        if (reply->error() == QNetworkReply::NoError) {
            QByteArray data = reply->readAll();
            // 处理响应数据
        } else {
            // 处理错误
        }
        reply->deleteLater();
    });
     

    以上代码演示了使用 QNetworkAccessManager 发送 GET 请求并处理响应的基本流程。除此之外,QNetworkAccessManager 还支持发送 POST 请求、设置请求头、处理 cookie 等功能。
    
    以下是一个简单的代码示例,使用 QNetworkAccessManager 发送 GET 请求并获取响应:
 
    #include <QCoreApplication>
    #include <QNetworkAccessManager>
    #include <QNetworkReply>
    #include <QUrl>
    #include <QDebug>

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);

        QNetworkAccessManager *manager = new QNetworkAccessManager(&a);

        QUrl url("https://www.baidu.com");
        QNetworkRequest request(url);

        QNetworkReply *reply = manager->get(request);

        QObject::connect(reply, &QNetworkReply::finished, &a, [reply]() {
            if (reply->error() == QNetworkReply::NoError) {
                QByteArray data = reply->readAll();
                qDebug() << data;
            } else {
                qDebug() << "Error: " << reply->errorString();
            }
            reply->deleteLater();
            qApp->quit();
        });

        return a.exec();
    }
     

    此代码会发送一个 GET 请求到百度首页,获取响应并输出到控制台。注意,在处理响应数据时,需要使用 reply->readAll() 方法将数据读取出来,否则无法获取到响应内容。
    
    以下是一个简单的代码示例,使用 QNetworkAccessManager 发送 POST 请求并获取响应:
 
    #include <QCoreApplication>
    #include <QNetworkAccessManager>
    #include <QNetworkReply>
    #include <QUrl>
    #include <QDebug>

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);

        QNetworkAccessManager *manager = new QNetworkAccessManager(&a);

        QUrl url("https://httpbin.org/post");
        QNetworkRequest request(url);
        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

        QByteArray postData;
        postData.append("key1=value1&key2=value2");

        QNetworkReply *reply = manager->post(request, postData);

        QObject::connect(reply, &QNetworkReply::finished, &a, [reply]() {
            if (reply->error() == QNetworkReply::NoError) {
                QByteArray data = reply->readAll();
                qDebug() << data;
            } else {
                qDebug() << "Error: " << reply->errorString();
            }
            reply->deleteLater();
            qApp->quit();
        });

        return a.exec();
    }
     

    此代码会发送一个 POST 请求到 httpbin.org,请求数据为 "key1=value1&key2=value2",获取响应并输出到控制台。注意,在发送 POST 请求时,需要设置请求头的 Content-Type 为 "application/x-www-form-urlencoded",并将请求数据转换为 QByteArray 类型。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值