2013-09-10 3 views
1

Я использую Qt, я обнаружил, что QWebView и QNetworkRequest не могут совместно использовать файлы cookie в моей программе.В Qt QWebView и QNetworkRequest не могут делиться куки-файлами

Я знаю, что я должен установить cookiejar в QNetworkAccessManager и поделиться им, так:

networkAccessManager = new QNetworkAccessManager(); 
networkAccessManager->setCookieJar(new CCookieJar); 

QWebView* webView = new QWebView(this); 
webView->page()->setNetworkAccessManager(networkAccessManager); 

Когда я использую WebView, чтобы загрузить веб-сайт, и я войти в его. Все в порядке. Но пока я установил таймер для использования QNetworkRequest для загрузки html, веб-браузер выйдет на веб-сайт, я считаю, что файлы cookie были сброшены, поэтому изменение sessionid.

QString surl = "http://www.website.com" 
QNetworkRequest request; 
request.setUrl(QUrl(surl)); 
QList<QNetworkCookie> cookies = networkAccessManager->cookieJar()->cookiesForUrl(surl); 
for(QList<QNetworkCookie>::iterator it = cookies.begin(); it!=cookies.end(); it++) 
{ 
    request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue<QNetworkCookie>(*it)); 
} 
QNetWorkReply* reply = networkAccessManager->get(request) 
connect(reply, SIGNAL(finished()), this, SLOT(httpFinished())); 

В httpFinished я устанавливаю файлы cookie в networkAccessManager.

QNetworkReply* reply = qobject_cast<QNetworkReply *>(sender()); 
QVariant varCookies = reply->header(QNetworkRequest::SetCookieHeader); 
QList<QNetworkCookie> cookies = varCookies.value< QList<QNetworkCookie> >(); 
networkAccessManager->cookieJar()->setCookiesFromUrl(cookies, reply->url()); 
reply->deleteLater(); 

Я хочу WebView и QNetworkRequest получить результат можно разделить сессию, так что я могу получить данные в состоянии входа. Но моя программа не работает. Я пишу программный код путем поиска в том же примере.

Не можете ли вы рассказать мне, что происходит в моей программе и как ее исправить. Благодаря!

ответ

1

После того, как я попытаюсь, я нашел все, что я должен сделать, это добавить заголовок User-Agent WebView в запрос.

Например:

request.setRawHeader("User-Agent", "mozilla/5.0 (windows NT 5.1) applewebki..."); 

Или переписать функцию userAgentForUrl в QWebPage в (Const QUrl & URL), чтобы вернуть агента, который вы используете в запросе.

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