首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt中,QWebView和QNetworkRequest不能共享cookie

在Qt中,QWebView和QNetworkRequest不能共享cookie
EN

Stack Overflow用户
提问于 2013-09-10 12:18:49
回答 1查看 1.8K关注 0票数 2

我使用Qt,我发现QWebView和QNetworkRequest不能在我的程序中共享cookie。

我知道我应该将cookiejar设置为QNetworkAccessManager并共享它,所以:

代码语言:javascript
复制
networkAccessManager = new QNetworkAccessManager();
networkAccessManager->setCookieJar(new CCookieJar);

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

当我使用webView加载一个网站,并登录它。没问题。但是,当我设置一个使用QNetworkRequest下载html的计时器时,webView将在网站中注销,我看起来像cookies已经被重置了,所以会话I发生了变化。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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获得结果,这样我就可以在登录状态下获得数据。但我的程序不管用。我通过搜索相同的例子来编写程序代码。

你不能告诉我我的程序出了什么问题,以及如何纠正它吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-11 06:01:18

尝试之后,我发现我应该做的就是将webView的用户代理头添加到请求中。

例如:

代码语言:javascript
复制
request.setRawHeader("User-Agent", "mozilla/5.0 (windows NT 5.1) applewebki...");

或者重写QWebPage的函数userAgentForUrl(const & url),以返回在请求中使用的代理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18718800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档