我使用 Qt,我发现 QWebView 和 QNetworkRequest 无法在我的程序中共享 cookie。
我知道我应该将 cookiejar 设置为 QNetworkAccessManager 并共享它,所以:
networkAccessManager = new QNetworkAccessManager();
networkAccessManager->setCookieJar(new CCookieJar);
QWebView* webView = new QWebView(this);
webView->page()->setNetworkAccessManager(networkAccessManager);
当我使用 webView 加载网站并登录时。没关系。但是当我设置了一个定时器来使用QNetworkRequest下载html时,webView会在网站上注销,我看起来cookies已经被重置了,所以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 得到的结果可以共享会话,这样我就可以在登录状态下获取数据。但是我的程序不起作用。我通过搜索相同的示例编写程序代码。
你能不能告诉我我的程序出了什么问题,以及如何纠正它。谢谢!