Как читать данные из QNetworkReply, используемого QWebPage? - PullRequest
5 голосов
/ 18 декабря 2010

Я использую QWebPage для загрузки веб-страницы, а также всех ее ресурсов. В то же время я хотел бы получить сырые данные, загружаемые Qt во время этого процесса. Делаем это, читая данные из QNetworkReply в void QNetworkAccessManager::finished(QNetworkReply * reply) Сигнал не является хорошим решением, так как данные уже могли быть прочитаны самим QWebPage. Это потому что

QNetworkReply - это последовательный доступ QIODevice, что означает, что когда-то данные читается с объекта, он больше не хранится на устройстве.

согласно подробное описание из QNetworkReply.

Однако QWebPage можно настроить на использование пользовательских QNetworkAccessManager с переопределением createRequest метод

QNetworkReply * QNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )

Я думаю, что правильным решением было бы создать прокси для QNetworkReply и вернуть его методом createRequest. Этот прокси должен позволять читать данные из ответа, как в случае с оригинальным QNetworkReply (чтобы QWebPage мог читать данные из него), но в то же время этот прокси должен позволять читать данные другими объектами после того, как он был прочитано QWebPage. Другими словами, нам нужен тройник для QNetworkReply IODevice базового класса.

Как написать этот прокси?

1 Ответ

4 голосов
/ 01 января 2011

Похоже, кто-то уже хотел того же и написал прокси для QNetworkReply .

...