QNetworkAccessManager 和 cookie

问题描述

我正在尝试下载在用户通过同意页面(接受 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();
}

解决方法

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