2

QMLでQWebViewを使用しています。認証が必要なWebサイトを表示したい。データは標準のCookieを介して渡される必要があります。何か助けはありますか?追加のリンクまたは例があれば素晴らしいでしょう。

少し早いですがお礼を。

4

1 に答える 1

4

デフォルトでは、webkitで使用されるデフォルトのQNetworkAccessManagerには、独自の(非永続的な)Cookie jar、別名QNetworkCookieJarがあります。

これは、QWebPageの存続期間中のCookieの送受信を処理します。

複数のページにまたがって同じCookiejarを保持するには、次のことを行う必要があります。

  1. QNetworkCookieJarのインスタンスを作成し、場合によってはそれをサブクラス化して永続化します
  2. このCookiejarを新しく作成された各QWebPageに添付します

設定に保存された永続的なCookiejarの例:

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
于 2012-02-18T15:15:28.250 に答える