2013-07-16 15 views
7

Ich möchte die Ergebnisse einer GET-Anfrage sehen. Nach meinem Verständnis sollte dieser Code es tun. Was mache ich falsch?Qt QNetworkReply ist immer leer

void getDoc::on_pushButton_2_clicked() 
{ 
    manager = new QNetworkAccessManager(this); 
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); 
    manager->get(QNetworkRequest(QUrl("http://www.google.com"))); 
} 

void getDoc::replyFinished(QNetworkReply *reply) 
{ 
    qDebug() << reply->error(); //prints 0. So it worked. Yay! 
    QByteArray data=reply->readAll(); 
    qDebug() << data; // This is blank/empty 
    QString str(data); 
    qDebug() << "Contents of the reply: "; 
    qDebug() << str; //this is blank or does not print. 
} 

Der Code wird kompiliert und läuft gut. Es funktioniert einfach nicht.

Antwort

4

Versuchen Sie replyFinished Slot Modifizieren wie folgt aussehen:

QByteArray bytes = reply->readAll(); 
QString str = QString::fromUtf8(bytes.data(), bytes.size()); 
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 

Sie können dann die status drucken, um zu sehen, wenn Sie eine 200-Antwort erhalten:

qDebug() << QVariant(statusCode).toString(); 

Wenn Sie eine 302 bekommen Antwort erhalten Sie eine Statusweiterleitung. Sie müssen es so zu handhaben:

if(statusCode == 302) 
{ 
    QUrl newUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); 
    qDebug() << "redirected from " + replyUrl + " to " + newUrl.toString(); 
    QNetworkRequest newRequest(newUrl); 
    manager->get(newRequest); 
    return; 
} 

ich zurückkehrt, wenn ein Statuscode 302 zu stoßen, da will ich nicht den Rest des Verfahrens auszuführen.

Ich hoffe, das hilft!

+0

Danke. Der qDebug() gibt einen Code von 200, also funktioniert es. Wie kann ich jetzt auf den Inhalt der Seite zugreifen? Und was macht QString xml (str)? – Dirk

+1

Schön zu hören, dass es funktioniert! Ich habe den obigen Code von einem anderen meiner Projekte kopiert und vergessen, die Zeile "QString xml (str)" zu entfernen. Danke für die Aufmerksamkeit. Die 'QString str' sollte Ihnen Zugriff auf den Seiteninhalt geben. Lass es mich wissen, wenn es nicht so ist. –

+1

Siehe auch QNetworkRequest :: FollowRedirectsAttribute (http://doc.qt.io/qt-5/qnetworkrequest.html), wenn Sie Qt 5.6 ismailsunni