c++ - QNetworkCookieJar 中的 setCookiesFromUrl() 和 cookiesForUrl

标签 c++ qt cookies network-programming

基本上,我将我的用户名和密码发布到一个站点,比如 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 cookiesHow 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/

相关文章:

c++ - 使用 Code::Blocks 构建 boost 库

c++ - Qt connect 无法识别 lambda 表达式

python - 如何在 PyQt 应用程序退出时禁用清除剪贴板?

javascript - ASP.NET Core 中无法正确读取 Cookie

authentication - 在两个网站之间共享身份验证

c++ - 如果 void 实际上被定义为 `struct void {};` 会破坏多少现有的 C++ 代码

c++ - 使用二维数组作为一维数组是否正确?可能导致未定义的行为等等?

c++ - 从 'int'类型的返回值到函数返回类型( vector )没有可行的转换

c++ - Qt 项目中对 XOpenDisplay 的 undefined reference

cookies - 是否可以禁用 session 存储/本地存储并启用 Cookie?