问题描述
我正在尝试下载在用户通过同意页面(接受 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。