【发布时间】: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