ZBLOG

QT 同一个QNetworkAccessManager 会存在cookie吗

是的,QNetworkAccessManager 会自动管理 cookies。默认情况下,当你使用同一个 QNetworkAccessManager 实例进行多个网络请求时,它会在这些请求之间共享 cookies。这意味着,如果你的应用程序从服务器接收到 cookies,它们会被存储并在后续的请求中发送。

如果你想手动处理 cookies,可以使用 QNetworkCookieJar。这个类允许你管理 cookie 的存储、检索和删除。下面是一个示例,演示如何将 QNetworkCookieJarQNetworkAccessManager 一起使用:

  1. #include <QCoreApplication>
  2. #include <QNetworkAccessManager>
  3. #include <QNetworkRequest>
  4. #include <QNetworkReply>
  5. #include <QNetworkCookieJar>
  6. #include <QUrl>
  7. #include <QObject>
  8. #include <iostream>
  9. class NetworkManager : public QObject {
  10. Q_OBJECT
  11. public:
  12. NetworkManager() {
  13. manager = new QNetworkAccessManager(this);
  14. cookieJar = new QNetworkCookieJar(this);
  15. manager->setCookieJar(cookieJar); // 设置 Cookie Jar
  16. connect(manager, &QNetworkAccessManager::finished, this, &NetworkManager::onFinished);
  17. // 发起一个 GET 请求
  18. QUrl url("http://example.com");
  19. QNetworkRequest request(url);
  20. manager->get(request);
  21. }
  22. private slots:
  23. void onFinished(QNetworkReply *reply) {
  24. if (reply->error() == QNetworkReply::NoError) {
  25. // 打印响应内容
  26. std::cout << reply->readAll().toStdString() << std::endl;
  27. // 获取所有 cookies
  28. QList<QNetworkCookie> cookies = cookieJar->cookiesForUrl(reply->url());
  29. for (const QNetworkCookie &cookie : cookies) {
  30. std::cout << "Cookie: " << cookie.toRawForm().toStdString() << std::endl;
  31. }
  32. } else {
  33. std::cerr << "Error: " << reply->errorString().toStdString() << std::endl;
  34. }
  35. reply->deleteLater();
  36. }
  37. private:
  38. QNetworkAccessManager *manager;
  39. QNetworkCookieJar *cookieJar;
  40. };
  41. int main(int argc, char *argv[]) {
  42. QCoreApplication a(argc, argv);
  43. NetworkManager networkManager;
  44. return a.exec();
  45. }
  46. #include "main.moc"

在这个示例中,我们创建了一个 QNetworkAccessManager 和一个 QNetworkCookieJar,并将它们关联起来。当我们发出网络请求时,任何由服务器返回的 cookie 都会被自动存储在 cookieJar 中,并可以在后续的请求中使用。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?