Я использую 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
базового класса.
Как написать этот прокси?