ich benutze QT Version 4.6.3 unter debian 6.0.3 .
zum Einlesen eines von einem Messgerät per http bereitgestellten Datenstroms und einiger zusätzlicher Daten auf html-Seiten wollte ich den QNetworkAccessManager mittels GET Anfrage (QNetworkRequest) und QNetworkReply nutzen.
Das funktioniert auch bei den html-Seiten wunderbar.
Code: Alles auswählen
reply = qnam.get(QNetworkRequest(url));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(httpError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(readyRead()),
this, SLOT(httpReadyRead()));
connect(reply, SIGNAL(finished()),
this, SLOT(httpFinished()));WGET allerdings kann den Stream abspeichern:
Code: Alles auswählen
wget -S HOST:PORT
--2012-04-27 13:36:46-- HOST:PORT
Verbindungsaufbau zu HOST:PORT... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort...200 Keine Header, vermutlich ist es HTTP/0.9.
Länge: nicht spezifiziert
In »index.html« speichern.Eine längere Suche im Internet brachte keine ähnlichen Informationen (nur Probleme mit SSL, womit ich nicht zu kämpfen habe), bis auf folgendes, was ich im QT-Quelltext (4.7.0) wiederfand (in 4.6.0 war es noch nicht drin), ob es in 4.6.3 drin ist, entzieht sich meiner Kenntnis. Es handelt sich um die Datei qhttpnetworkconnectionchannel.cpp ( Siehe Pfeile im Code):
Code: Alles auswählen
case QAbstractSocket::RemoteHostClosedError:
// try to reconnect/resend before sending an error.
// while "Reading" the _q_disconnected() will handle this.
if (state != QHttpNetworkConnectionChannel::IdleState && state != QHttpNetworkConnectionChannel::ReadingState) {
if (reconnectAttempts-- > 0) {
closeAndResendCurrentRequest();
return;
} else {
errorCode = QNetworkReply::RemoteHostClosedError;
}
} else if (state == QHttpNetworkConnectionChannel::ReadingState) {
if (!reply->d_func()->expectContent()) {
// No content expected, this is a valid way to have the connection closed by the server
return;
}
if (reply->contentLength() == -1 && !reply->d_func()->isChunked()) {
--> // There was no content-length header and it's not chunked encoding,
--> // so this is a valid way to have the connection closed by the server
return;
}
// ok, we got a disconnect even though we did not expect it
errorCode = QNetworkReply::RemoteHostClosedError;
} else {
errorCode = QNetworkReply::RemoteHostClosedError;
}
break;Ich bin etwas ratlos, da ich bislang nur mit per WGET zwischengespeicherten Daten entwickelt habe (wo mein lokaler Webserver natürlich Header und Länge mitliefert). Habt ihr Tipps, was ich weiter testen kann? Update auf neue QT Version sehe ich als letzte Maßnahme.
Danke!
Kai