2012-02-17 3 views
1

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

Благодарим заранее.

ответ

3

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

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

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

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

Пример постоянной баночки печенья сохраненной настройку:

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 
+0

@shahinul - вы должны принять ответ. –

+0

Подсказка: если вы не указали приведенный выше код, вы можете расширить его и переопределить виртуальный метод cookiesForUrl (QUrl *). Соберите куки метода базового класса там, добавьте свои постоянные и верните все из них. Таким образом, ваш файл cookie будет передан любому URL-адресу, открытому в браузере. – Fabian

 Смежные вопросы

  • Нет связанных вопросов^_^