如何在QML中使用QWebview设置cookie?

发布于 2025-01-07 02:42:02 字数 92 浏览 2 评论 0原文

我在 QML 中使用 QWebView。我想显示需要身份验证的网站。数据应通过标准 cookie 传递。 有什么帮助吗?附加链接或示例会很棒。

提前致谢。

I am using QWebView in QML. I want to show web site that needs authentication. Data should be passed via standard cookie.
Any help? Additional link or example would be great.

Thank in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

携君以终年 2025-01-14 02:42:02

默认情况下,webkit 使用的默认 QNetworkAccessManager 有自己的(非持久性)cookie jar,又名 QNetworkCookieJar。

这将处理 QWebPage 生命周期内 cookie 的发送和接收。

要在多个页面上保留相同的 cookie jar,您必须:

  1. 创建 QNetworkCookieJar 的实例,可能是子类化
    为了使其持久化,
  2. 将此 cookie 罐附加到每个新的
    创建的 QWebPage

保存到设置的持久 cookie jar 的示例:

class PersistentCookieJar : public QNetworkCookieJar {
public:
    PersistentCookieJar(QObject *parent) : QNetworkCookieJar(parent) { load(); }
    ~PersistentCookieJar() { save(); }

public:
    void save()
    {
        QList<QNetworkCookie> list = allCookies();
        QByteArray data;
        foreach (QNetworkCookie cookie, list) {
            if (!cookie.isSessionCookie()) {
                data.append(cookie.toRawForm());
                data.append("\n");
            }
        }
        QSettings settings;
        settings.setValue("Cookies",data);
    }

    void load()
    {
        QSettings settings;
        QByteArray data = settings.value("Cookies").toByteArray();
        setAllCookies(QNetworkCookie::parseCookies(data));
    }
};

要使用:

QWebView* vw = new QWebView(this);
PersistenCookieJar* jar = new PersistenCookieJar(this);
vw->page()->networkAccessManager()->setCookieJar(jar);  // the jar is reparented to the page
jar->setParent(this);  // reparent to main widget to avoid destruction together with the page

By default, the default QNetworkAccessManager used by webkit have its own (non-persistent) cookie jar, aka QNetworkCookieJar.

This will handle the sending and receiving of cookies during the life span of a QWebPage.

To keep the same cookie jar across multiple pages, you have to:

  1. Create an instance of a QNetworkCookieJar, possibly subclassing
    it to make it persistent
  2. attach this cookie jar to each newly
    created QWebPage

Example of a persistent cookie jar saved to settings:

class PersistentCookieJar : public QNetworkCookieJar {
public:
    PersistentCookieJar(QObject *parent) : QNetworkCookieJar(parent) { load(); }
    ~PersistentCookieJar() { save(); }

public:
    void save()
    {
        QList<QNetworkCookie> list = allCookies();
        QByteArray data;
        foreach (QNetworkCookie cookie, list) {
            if (!cookie.isSessionCookie()) {
                data.append(cookie.toRawForm());
                data.append("\n");
            }
        }
        QSettings settings;
        settings.setValue("Cookies",data);
    }

    void load()
    {
        QSettings settings;
        QByteArray data = settings.value("Cookies").toByteArray();
        setAllCookies(QNetworkCookie::parseCookies(data));
    }
};

To use:

QWebView* vw = new QWebView(this);
PersistenCookieJar* jar = new PersistenCookieJar(this);
vw->page()->networkAccessManager()->setCookieJar(jar);  // the jar is reparented to the page
jar->setParent(this);  // reparent to main widget to avoid destruction together with the page
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文