2010-03-11 7 views
7

im principiante con QtWebKit construyo un marco web simple que carga la página (lado del servidor) y cuando desde esta página envío datos me gusta capturar la cadena de respuestas del servidor en el lado de C++ cómo Puedo hacer eso ?cómo obtener respuesta en QtWebKit

+1

Comience por usar más signos de puntuación y menos espacios en blanco. Mejoraría la legibilidad y la comprensión. –

Respuesta

1

Puede usar la clase QNetworkReply para ello. QWebPage instancias tienen el método networkAccessManager() que devuelve una instancia QNetworkAccessManager capaz de enviar solicitudes y recibir respuestas.

Debe buscar su señal finished.

void QNetworkAccessManager::finished (QNetworkReply * reply)

Esta señal se emite cada vez que se terminó la espera de una respuesta de la red . El parámetro de respuesta contendrá un puntero a la respuesta que acaba de finalizar.

QNetworkReply a su vez es una heredera de QIODevice por lo tanto, usted es capaz de llamar a su método readAll() el fin de recibir los datos de respuesta.

También puede encontrar this pregunta útil.

+0

esto simplemente no funciona ... – user63898

+1

Quiero hacer exactamente lo mismo y este método no parece funcionar: cuando se emite la señal de finalización, WebKit ya ha leído todos los datos del objeto de respuesta por lo que simplemente no está allí. – Ghostrider

8

He jugado con Qt (que soy nuevo) y encontré una forma de capturar todos los recursos descargados por WebKit. Así es como:

1) crear una subclase de QNetworkAccessManager

2) En la clase derivada, de anulación de funciones virtuales createRequest

3) la implementación de la clase base llamada para obtener el objeto respuesta. Después de eso se puede ver en la URL (u otros parámetros) y determinar si es necesario para capturar ese recurso en particular o no

4) si - conectar la señal readyRead en cierta ranura que capturará los datos

5) en que la función de llamada ranura peek para leer datos de modo que WebKit obtendrá los datos también

6) Después de crear objeto QWebPage, llaman setNetworkAccessManager y pasar una instancia recién creada de la subclase de la etapa 1)

Eso es todo, ¡disfruta!

+0

Lo bueno de este enfoque es que parece que se encarga de Content-Encoding: gzip y desinflar en ese punto para que no tenga que descomprimir datos usted mismo – Ghostrider

Cuestiones relacionadas