Как установить cookie с QWebview в QML? - PullRequest
1 голос
/ 18 февраля 2012

Я использую QWebView в QML.Я хочу показать веб-сайт, который нуждается в аутентификации.Данные должны быть переданы через стандартный файл cookie.Любая помощь?Дополнительная ссылка или пример были бы отличными.

Заранее благодарны.

1 Ответ

3 голосов
/ 18 февраля 2012

По умолчанию QNetworkAccessManager по умолчанию, используемый webkit, имеет свой собственный (непостоянный) файл cookie, aka QNetworkCookieJar.

Он будет обрабатывать отправку и получение файлов cookie в течение срока службы QWebPage.

Чтобы сохранить один и тот же файл cookie на нескольких страницах, вам необходимо:

  1. Создать экземпляр QNetworkCookieJar, возможно, создать его подклассы, чтобы сделать его постоянным
  2. присоединить этоjar cookie для каждого вновь созданного QWebPage

Пример постоянного jar cookie, сохраненного в настройках:

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
...