QCetworkCookieJar中的setCookiesFromUrl()和cookiesForUrl

时间:2016-04-30 12:26:08

标签: c++ qt cookies network-programming

通常,我将用户名和密码发布到网站上,例如 http://example.org/signup.asp 。然后我从中获取cookie,我想将它保存在qnam_中,这是QNetworkAccessManager的一个对象。

问题1

第一个问题是,在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"));

问题2

第二个是甚至我在“根主机名”中设置了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,但我觉得这不行。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我使用以下解决方案进行了这项工作:

在QNetworkReply ::函数的回调中,我添加了一个cookie

QNetworkCookie cookie("mycookie", mycookiedata.toUtf8());
QList<QNetworkCookie> cookies;
cookies.append(cookie);
mCookieJar.setCookiesFromUrl(cookies, reply->url());