QTcpSocket: HTML empfangen
-
Moin,
ich hab ein Problem mit
QTcpSocket
. Ich möchte das HTML der Website www.dict.cc empfangen, teilweise klappt das auch, aber dann endet es in einer Endlosschleife. Meine Methode sieht wie folgt aus:// search keyword in dict.cc void MainWindow::search(){ QTcpSocket* socket = new QTcpSocket(this); socket->connectToHost("www.dict.cc", 80, QIODevice::ReadWrite); if(socket->waitForConnected()){ socket->write("GET /?s=" + QUrl::toPercentEncoding(line_edit->text()) + " HTTP/1.1\r\n" "HOST: www.dict.cc\r\n\r\n"); QString html; while(socket->waitForReadyRead()){ html += socket->readAll(); qDebug(html.toStdString().c_str()); } } ... }
Das Problem findet in Zeile 12 statt. Das HTML wird irgendwie nur teilweise geladen (was auch auf dem Bildschirm ausgegeben wird) und dann hängt sich das ganze Programm halt irgendwie auf.
Dann habe ich auch noch folgendes ausprobiert:
Versuch 2: Erzeugt Endlosschleife ohne Bildschirmausgabe.
Versuch 3: Erzeugt weder Endlosschleife, noch Bildschirmausgabe.
Versuch 4: Erzeugt Endlosschleife mit Bildschirmausgabe.Hoffe, dass mir jemand helfen kann.
Mit freundlichen Grüßen,
Naseweiß.
-
Würde da eher auf den QNetworkAccessManager setzen, mit QNetworkRequest/Reply kannst du genau das recht einfach umsetzen.
-
phlox81 schrieb:
Würde da eher auf den QNetworkAccessManager setzen, mit QNetworkRequest/Reply kannst du genau das recht einfach umsetzen.
Hmm, ok ich werds mir ansehen.
So funktioniert es übrigens, ist mir aber zu absturzgefährdet:
// search keyword in dict.cc void MainWindow::search(){ QTcpSocket* socket = new QTcpSocket(this); socket->connectToHost("www.dict.cc", 80, QTcpSocket::ReadWrite); if(socket->waitForConnected()){ socket->write("GET /?s=" + QUrl::toPercentEncoding(line_edit->text()) + " HTTP/1.1\r\n" "Host: www.dict.cc\r\n\r\n"); QString html; while(html.contains("</html>", Qt::CaseInsensitive) == false){ socket->waitForReadyRead(); html += socket->readAll(); } parse(html.toStdString()); } else{ QMessageBox::information(this, "Connection not established", "Could not connect to the server of dict.cc. Please try again later."); } socket->deleteLater(); }