2013-07-16 3 views
7

Я хочу увидеть результаты запроса GET. По моему мнению, этот код должен это сделать. Что я делаю не так?Qt QNetworkReply всегда пуст

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. 
} 

Код компилируется и работает нормально. Это просто не работает.

ответ

4

Попробуйте изменить свой replyFinished слот выглядеть следующим образом:

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

Вы можете распечатать StatusCode, чтобы увидеть, если вы получаете ответ 200:

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

Если вы получаете 302 ответ, вы получаете перенаправление статуса. Вам нужно будет обрабатывать это следующим образом:

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

Я возвращаюсь, сталкиваясь код состояния 302, так как я не хочу, остальную часть метода для выполнения.

Надеюсь, это поможет!

+0

Спасибо. QDebug() дает код 200, поэтому он работает. Как мне получить доступ к содержимому страницы? И что делает QString xml (str)? – Dirk

+1

Замечательно, что это работает! Я скопировал вышеуказанный код из другого моего проекта и забыл удалить строку 'QString xml (str)'. Спасибо, что привлекли это к моему вниманию. Строка 'QString str' должна предоставить вам доступ к содержимому страницы. Дайте мне знать, если это не так. –

+1

См. Также QNetworkRequest :: FollowRedirectsAttribute (http://doc.qt.io/qt-5/qnetworkrequest.html), если вы используете Qt 5.6 < – ismailsunni