如何从 QNetworkReply 读取数据?
How do I read the data from QNetworkReply?
如何在 QWebPage 之前从特定 URL 的 QNetworkReply
响应中读取数据?但是当 finished()
signal is emited the reply is read already by QWebPage, so connect readyRead()
或调用 reply->readAll()
return 时什么都没有。我尝试在我自己的 QWebPage class 中重载 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;
}
但我无法回复工作...returned 回复无效(甚至 return 一个 http 状态代码,我知道这意味着 http 请求已发送无效,但我不知道为什么)。
欢迎使用不同的方法来解决这个问题!
使用带有 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());
}
});
如何在 QWebPage 之前从特定 URL 的 QNetworkReply
响应中读取数据?但是当 finished()
signal is emited the reply is read already by QWebPage, so connect readyRead()
或调用 reply->readAll()
return 时什么都没有。我尝试在我自己的 QWebPage class 中重载 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;
}
但我无法回复工作...returned 回复无效(甚至 return 一个 http 状态代码,我知道这意味着 http 请求已发送无效,但我不知道为什么)。
欢迎使用不同的方法来解决这个问题!
使用带有 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());
}
});