Как читать данные из QNetworkReply, используемые QWebPage?

Я использую 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.

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


person Piotr Dobrogost    schedule 17.12.2010    source источник


Ответы (1)


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

person Piotr Dobrogost    schedule 01.01.2011
comment
Привет, Петр, ты не знаешь, есть ли еще где-нибудь прокси? Ссылка кажется битой. - person izyda; 21.08.2015
comment
@izyda Похоже, что ссылка временно недоступна - Репозитории скоро будут доступны только для чтения с сохранением исходных URL-адресов клонов. - person Piotr Dobrogost; 21.08.2015
comment
Понятно. Кстати, вы обнаружили, что создание подкласса QtNetworkResponse является лучшим вариантом, чем использование peek()? - person izyda; 21.08.2015