QNetworkReply не имеет данных

У меня есть QWebView, где я просматриваю сетевые запросы, подключаясь:

  QObject::connect(page()->networkAccessManager(),
                     SIGNAL(finished(QNetworkReply*)),
                     this,
                     SLOT(networkLoaded(QNetworkReply*)));

тогда:

void browserControl::networkLoaded(QNetworkReply *reply)
{
    const QUrl reqUrl = reply->request().url();
    qDebug() << "url = " << reqUrl;

    QByteArray array = reply->readAll();
    QString data = QString::fromUtf8(array.data(), array.size());
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).value<int>();

 qDebug() << "data = " << data;
    qDebug() << "http code = " << statusCode;
}

Но данные всегда пусты, независимо от того, является ли statusCode 200. Класс browserControl наследуется от класса QWebView.


person Jack    schedule 04.01.2016    source источник
comment
Вы уверены, что входящие данные на самом деле UTF-8? Кроме того, вы прошивали его, чтобы убедиться, что данные действительно поступают?   -  person MrEricSir    schedule 04.01.2016
comment
Проверить ответ-›error() и errorString()   -  person Frank Osterfeld    schedule 04.01.2016
comment
Это пусто, вероятно, потому что страница прочитала все до вас   -  person Kamil Klimek    schedule 04.01.2016
comment
Камиль прав, вы мешаете чтению ответов WebView. Только один приемник может «потреблять» данные, и первым приемником сигнала, скорее всего, является WebView.   -  person Frank Osterfeld    schedule 04.01.2016
comment
@KamilKlimek: Опубликуйте это как ответ, чтобы я мог принять   -  person Jack    schedule 05.01.2016
comment
@FrankOsterfeld: Почему данные очищаются после использования? не лучше ли указать какой-нибудь указатель на данные для использования в таком случае?   -  person Jack    schedule 05.01.2016
comment
@Jack: Вот как работает QNetworkReply: вы читаете данные по мере их поступления (или собираете их в конце, но это ваш выбор), и впоследствии они не будут сохраняться в ответе. Представьте себе загрузку размером в гигабайты, вы не хотите, чтобы все это было в памяти одновременно.   -  person Frank Osterfeld    schedule 05.01.2016
comment
@FrankOsterfeld: теперь я понимаю. Спасибо за уточнение   -  person Jack    schedule 05.01.2016


Ответы (1)


Вы не получаете данных, потому что QWebPage прочитал все данные перед вызовом вашего слота

person Kamil Klimek    schedule 07.01.2016
comment
Как я могу запретить QWebPage читать эти данные с определенного URL-адреса? переопределить QWebPage::acceptNavigationRequest() в целевом URL? - person Jack; 24.08.2017