Uso QWebPage
para descargar una página web y todos sus recursos. Al mismo tiempo, me gustaría obtener datos sin procesar que Qt está descargando durante este proceso. Hacer esto leyendo datos de QNetworkReply
en void QNetworkAccessManager::finished(QNetworkReply * reply)
señal no es una buena solución, ya que los datos podrían haber sido leídos por QWebPage
. Esto se debe a¿Cómo leer los datos de QNetworkReply utilizados por QWebPage?
QNetworkReply es un secuencial de acceso QIODevice, lo que significa que una vez que los datos se lee desde el objeto, ya no mantiene por el dispositivo.
según detailed description de QNetworkReply
.
Sin embargo QWebPage
puede ser configurado para utilizar encargo QNetworkAccessManager
con overriden createRequest
método
QNetworkReply * QNetworkAccessManager::createRequest (Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0)
Creo que la mejor solución sería crear un proxy para QNetworkReply
y devolverlo en el método createRequest
. Este proxy debería permitir la lectura de datos de respuesta como en el caso del QNetworkReply
original (para que QWebPage
pudiera leer datos del mismo) pero al mismo tiempo este proxy debería permitir leer datos de otros objetos después de haber sido leídos por QWebPage
. En otras palabras, necesitamos tee para la clase base QNetworkReply
IODevice
.
¿Cómo escribir este proxy?
Hola Piotr, ¿sabes si el proxy todavía está disponible en alguna parte? El enlace parece estar roto. – izyda
@izyda Parece que el enlace está temporalmente no disponible - * Los repositorios pronto estarán disponibles para acceso de solo lectura, con las URL de clonación originales conservadas. * –
Lo tengo. En una nota lateral, ¿descubrió que la subclasificación de QtNetworkResponse es una mejor opción que el uso de peek()? – izyda