ZBLOG

QT 同一个QNetworkAccessManager 会存在cookie吗

是的,QNetworkAccessManager 会自动管理 cookies。默认情况下,当你使用同一个 QNetworkAccessManager 实例进行多个网络请求时,它会在这些请求之间共享 cookies。这意味着,如果你的应用程序从服务器接收到 cookies,它们会被存储并在后续的请求中发送。

如果你想手动处理 cookies,可以使用 QNetworkCookieJar。这个类允许你管理 cookie 的存储、检索和删除。下面是一个示例,演示如何将 QNetworkCookieJarQNetworkAccessManager 一起使用:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkCookieJar>
#include <QUrl>
#include <QObject>
#include <iostream>

class NetworkManager : public QObject {
    Q_OBJECT

public:
    NetworkManager() {
        manager = new QNetworkAccessManager(this);
        cookieJar = new QNetworkCookieJar(this);
        manager->setCookieJar(cookieJar); // 设置 Cookie Jar

        connect(manager, &QNetworkAccessManager::finished, this, &NetworkManager::onFinished);

        // 发起一个 GET 请求
        QUrl url("http://example.com");
        QNetworkRequest request(url);
        manager->get(request);
    }

private slots:
    void onFinished(QNetworkReply *reply) {
        if (reply->error() == QNetworkReply::NoError) {
            // 打印响应内容
            std::cout << reply->readAll().toStdString() << std::endl;

            // 获取所有 cookies
            QList<QNetworkCookie> cookies = cookieJar->cookiesForUrl(reply->url());
            for (const QNetworkCookie &cookie : cookies) {
                std::cout << "Cookie: " << cookie.toRawForm().toStdString() << std::endl;
            }
        } else {
            std::cerr << "Error: " << reply->errorString().toStdString() << std::endl;
        }
        reply->deleteLater();
    }

private:
    QNetworkAccessManager *manager;
    QNetworkCookieJar *cookieJar;
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
    NetworkManager networkManager;
    return a.exec();
}

#include "main.moc"

在这个示例中,我们创建了一个 QNetworkAccessManager 和一个 QNetworkCookieJar,并将它们关联起来。当我们发出网络请求时,任何由服务器返回的 cookie 都会被自动存储在 cookieJar 中,并可以在后续的请求中使用。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19281

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?