ZBLOG

不用 QNetworkCookieJar 保存cookie

如果不使用 QNetworkCookieJar 来保存 cookies,你可以手动处理 HTTP 响应中的 Set-Cookie 头,并在后续的请求中将这些 cookies 添加到请求中。以下是一个简单的示例,展示了如何做到这一点:

示例代码

  1. #include <QCoreApplication>
  2. #include <QNetworkAccessManager>
  3. #include <QNetworkReply>
  4. #include <QNetworkRequest>
  5. #include <QStringList>
  6. #include <QDebug>
  7. int main(int argc, char *argv[])
  8. {
  9. QCoreApplication a(argc, argv);
  10. QNetworkAccessManager manager;
  11. // 发送第一个请求
  12. QNetworkRequest request(QUrl("http://example.com/api/login"));
  13. request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
  14. // 连接 finished 信号,以获取响应
  15. QObject::connect(&manager, &QNetworkAccessManager::finished, [&](QNetworkReply *reply) {
  16. if (reply->error() == QNetworkReply::NoError) {
  17. // 获取 Set-Cookie 头部
  18. QList<QByteArray> cookieHeaders = reply->rawHeaderList();
  19. QString cookies;
  20. for (const QByteArray &header : cookieHeaders) {
  21. if (header.toLower() == "set-cookie") {
  22. // 将所有 Cookies 拼接起来
  23. cookies += reply->rawHeader(header) + "; ";
  24. }
  25. }
  26. qDebug() << "Received Cookies:" << cookies;
  27. // 下一次请求时使用这些 cookies
  28. QNetworkRequest nextRequest(QUrl("http://example.com/api/next"));
  29. nextRequest.setRawHeader("Cookie", cookies.toUtf8());
  30. // 发送下一个请求
  31. manager.get(nextRequest);
  32. } else {
  33. qDebug() << "Error:" << reply->errorString();
  34. }
  35. reply->deleteLater();
  36. });
  37. // 实际发送登录请求(如有需要,可以在此设置 POST 数据)
  38. manager.post(request, "username=user&password=pass");
  39. return a.exec();
  40. }

关键步骤解析:

  1. 发送请求:我们首先通过 manager.post() 方法向服务器发送 POST 请求。

  2. 处理响应

    • 使用 QObject::connectfinished 信号连接到 lambda 函数,这样当收到响应时就会调用该函数。
    • 检查是否存在错误,如果没有,则读取响应中的 Set-Cookie 头。
  3. 提取和拼接 Cookies

    • 遍历所有原始响应头,找到所有的 Set-Cookie 并将它们合并为一个字符串。注意,有些服务器可能会返回多个 cookie。
  4. 使用 Cookies 发起新的请求

    • 在发起后续请求之前,通过 setRawHeader 方法手动设置 Cookie。

这种方法允许你完全控制 Cookie 的管理,而无需依赖 Qt 内置的 Cookie Jar。不过,需要确保你在应用程序中妥善管理和存储这些 Cookies,以便在适当的时候进行重用。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19415

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?