[英]How do I read the data from QNetworkReply?
How do I read the data from a QNetworkReply
response from a specific URL before QWebPage does? 在QWebPage之前,如何从特定URL的QNetworkReply
响应中读取数据? but when the finished()
signal is emited the reply is read already by QWebPage, so connect readyRead()
or call reply->readAll()
return nothing. 但是当发出finish finished()
信号时,QWebPage已经读取了答复,因此连接readyRead()
或调用reply->readAll()
不会返回任何内容。 I tried overload acceptNavigationRequest() method in my own QWebPage class, something like this: 我在自己的QWebPage类中尝试了重载acceptNavigationRequest()方法,如下所示:
bool webPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type)
{
//qDebug() << "filename = " << request.rawHeader("content-disposition");
if(request.url().path() == QStringLiteral("download.php"))
{
QNetworkReply *reply = networkAccessManager()->get(request);
QFile file;
file.setFileName(filename);
if(!file.open(QIODevice::ReadWrite))
{
/* handle error */
}
file.write(reply->readAll());
file.close();
return false;
}
But I couldn't manage to reply work... the returned reply is invalid (don't even return a http status code, I know it means the http request sent is invalid but i don't know why). 但是我无法回复工作...返回的回复无效(甚至不返回http状态代码,我知道这意味着发送的http请求无效,但我不知道为什么)。
Different approachs to solve this are welcome! 欢迎采用不同的方法来解决此问题!
Using the finished slot with a lambda expression, you can do this: - 通过使用带有lambda表达式的完成的广告位,您可以执行以下操作:-
QNetworkReply* reply = networkAccessManager()->get(request);
connect(reply, &QNetworkReply::finished, [=]() {
if(reply->error() == QNetworkReply::NoError)
{
QByteArray response = reply->readAll();
// do something with the data...
}
else // handle error
{
qDebug(pReply->errorString());
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.