基本上,我将我的用户名和密码发布到一个站点,比如 http://example.org/signup.asp 。然后我从中获取 cookie,我想将其保存在 QNetworkAccessManager 的对象 qnam_
中。
问题1
第一个问题是,将cookie保存到reply_
对应的url后,say http://example.org/signup.asp ,我无法通过 http://example.org/ 取回它 或 http://example.org/something_else .
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"));
问题2
第二个是甚至 我在“根主机名”中设置cookie,比如 http://example.org/ ,我仍然无法通过相同的 url 检索它。
assert(cookieJar->setCookiesFromUrl(cookies, QUrl("http://example.org")));
qnam_.setCookieJar(cookieJar);
// Still get nothing from it.
qDebug() << qnam_.cookieJar()->cookiesForUrl(QUrl("http://example.org"));
请注意,我已经检查了 QT HTTP Post issue when server requires cookies和 How do I save cookies with Qt? ,我认为这是行不通的。
有什么想法吗?谢谢!
最佳答案
我使用以下解决方案使这个工作正常:
在 QNetworkReply::finished 的函数回调中我添加了一个 cookie
QNetworkCookie cookie("mycookie", mycookiedata.toUtf8());
QList<QNetworkCookie> cookies;
cookies.append(cookie);
mCookieJar.setCookiesFromUrl(cookies, reply->url());
关于c++ - QNetworkCookieJar 中的 setCookiesFromUrl() 和 cookiesForUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954933/