Ich benutze QWebPage
, um eine Webseite sowie alle ihre Ressourcen herunterzuladen. Gleichzeitig möchte ich Rohdaten, die von Qt während dieses Prozesses heruntergeladen werden, in den Griff bekommen. Dies zu tun, indem Daten aus QNetworkReply
in void QNetworkAccessManager::finished(QNetworkReply * reply)
Signal gelesen wird, ist keine gute Lösung, da Daten bereits von QWebPage
selbst gelesen werden konnten. Dies liegt daran,Wie lese ich Daten von QNetworkReply, die von QWebPage verwendet werden?
QNetworkReply ist ein sequenzieller Zugriff QIODevice, was bedeutet, dass, sobald Daten von dem Objekt gelesen wird, es nicht mehr durch die Vorrichtung gehalten wird.
nach detailed description von QNetworkReply
.
jedoch QWebPage
können benutzerdefinierte verwenden QNetworkAccessManager
mit überschriebene createRequest
Methode
QNetworkReply * QNetworkAccessManager::createRequest (Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0)
Ich denke, die richtige Lösung wäre, erstellen Sie einen Proxy für QNetworkReply
und senden Sie es in der createRequest
Verfahren konfiguriert werden. Dieser Proxy sollte das Lesen von Daten aus der Antwort ermöglichen, wie es bei dem ursprünglichen QNetworkReply
der Fall ist (so dass QWebPage
Daten daraus lesen könnte), aber gleichzeitig sollte dieser Proxy das Lesen von Daten durch andere Objekte ermöglichen, nachdem sie von QWebPage
gelesen wurden. Mit anderen Worten, wir brauchen tee für QNetworkReply
's IODevice
Basisklasse.
Wie schreibe ich diesen Proxy?
Hallo Piotr, weißt du, ob der Proxy irgendwo noch verfügbar ist? Der Link scheint unterbrochen zu sein. – izyda
@izyda Es sieht so aus, als ob der Link nur temporär nicht verfügbar ist - * Die Repositories werden demnächst für den schreibgeschützten Zugriff verfügbar sein, wobei die ursprünglichen Klon-URLs erhalten bleiben. * –
Nebenbei bemerkt, haben Sie herausgefunden, dass QtNetworkResponse als Unterklasse eine bessere Option ist als die Verwendung von peek()? – izyda