通常,我将用户名和密码发布到网站上,例如 http://example.org/signup.asp 。然后我从中获取cookie,我想将它保存在qnam_
中,这是QNetworkAccessManager的一个对象。
第一个问题是,在reply_
的相应网址中保存Cookie后,比如说 http://example.org/signup.asp ,我无法通过 {{找回它3}} 或 http://example.org/ 。
auto cookies = qvariant_cast<QList<QNetworkCookie>>(reply_->header
(QNetworkRequest::SetCookieHeader));
auto cookieJar = new QNetworkCookieJar(&qnam_);
// qDebug() outputs "http://example.org/sign.asp"
qDebug() << reply_->request().url();
// assert won't fire, which means "one or more cookies are set for url"
assert(cookieJar->setCookiesFromUrl(cookies, reply_->request().url()));
qnam_.setCookieJar(cookieJar);
// qDebug() outputs nothing, but "()", why???
qDebug() << qnam_.cookieJar()->cookiesForUrl(QUrl("http://example.org"));
第二个是甚至我在“根主机名”中设置了Cookie,比如 http://example.org/something_else ,我仍然无法通过相同的网址检索它。< / p>
assert(cookieJar->setCookiesFromUrl(cookies, QUrl("http://example.org")));
qnam_.setCookieJar(cookieJar);
// Still get nothing from it.
qDebug() << qnam_.cookieJar()->cookiesForUrl(QUrl("http://example.org"));
请注意,我已经检查了http://example.org/和QT HTTP Post issue when server requires cookies,但我觉得这不行。
有什么想法吗?谢谢!
答案 0 :(得分:0)
我使用以下解决方案进行了这项工作:
在QNetworkReply ::函数的回调中,我添加了一个cookie
QNetworkCookie cookie("mycookie", mycookiedata.toUtf8());
QList<QNetworkCookie> cookies;
cookies.append(cookie);
mCookieJar.setCookiesFromUrl(cookies, reply->url());