Я использую 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
. Другими словами, нам нужен tee для базового класса QNetworkReply
IODevice
.
Как написать этот прокси?