【问题标题】:QNetworkAccessManager and cookiesQNetworkAccessManager 和 cookie
【发布时间】:2021-09-13 00:15:24
【问题描述】:

我正在尝试下载在用户通过同意页面(接受 cookie)后打开的网站 (youtube)。所以我创建 QNetworkRequest 请求并将 RawHeader 设置为(“COOKIE”,“CONSENT=YES+42”)。它工作正常,但只有第一次尝试下载。每次下一次尝试时,我都会在同意页面上反弹。每次我在 QNetworkAccessManager 对象上使用 deleteLater() 时,问题都会以某种方式被绕过。但是文档声称“一个 QNetworkAccessManager 实例应该足以满足整个 Qt 应用程序”(还为每次使用创建 QNetworkAccessManager 的新实例最终导致没有收到重播和处理器使用的增加)。所以我的问题是如何“重置” QNetworkAccessManager 以便在下次使用时,它与第一个请求一样。 我的代码如下所示:

Youtube::Youtube(QObject *parent) : QObject(parent)
{
    manager = new QNetworkAccessManager(this);
}
 
void Youtube::makeRequest(QString indexCore){
    QNetworkReply *reply;
    QNetworkRequest request;
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotReadyRead(QNetworkReply*)));
    request.setRawHeader("COOKIE" , "CONSENT=YES+42"   ); //works
        request.setUrl(QUrl("https://" +  indexCore ));
    reply = manager->get(request);
}
 
void Youtube::slotReadyRead(QNetworkReply *replay)
{
    QByteArray dataTemp = replay->readAll();
    website = dataTemp.toStdString();
    replay->deleteLater();
}

【问题讨论】:

    标签: c++ qt cookies qnetworkaccessmanager


    【解决方案1】:

    好的。我只需要设置并清空 QNetworkCookieJar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多