2013-07-16 11 views
7

मैं एक जीईटी अनुरोध के परिणाम देखना चाहता हूं। मेरी समझ से, यह कोड इसे करना चाहिए। मैं क्या गलत कर रहा हूं?क्यूटी 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 स्लॉट को संशोधित करने के लिए इस तरह देखने के लिए प्रयास करें:

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

आप एक 302 मिल रहे हैं:

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

फिर आप अगर आप एक 200 प्रतिक्रिया हो रही है देखने के लिए statusCode मुद्रित कर सकते हैं प्रतिक्रिया, आपको एक स्थिति पुनर्निर्देशन मिल रहा है। आप इस तरह इसे संभाल करने की आवश्यकता होगी:

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

यह सुनकर बहुत अच्छा लगता है कि यह काम करता है! मैंने उपर्युक्त कोड को मेरी दूसरी परियोजना से कॉपी किया और 'क्यूस्ट्रिंग एक्सएमएल (स्ट्र)' लाइन को हटाने के लिए भूल गया। मेरे ध्यान में लाने के लिए धन्यवाद। 'क्यूस्ट्रिंग स्ट्र' आपको पृष्ठ सामग्री तक पहुंच प्रदान कर सकता है। अगर यह नहीं है तो मुझे बताएं। –

+1

QNetworkRequest :: FollowRedirectsAttribute (http://doc.qt.io/qt-5/qnetworkrequest.html) भी देखें, यदि आप Qt 5.6 का उपयोग करते हैं < – ismailsunni

संबंधित मुद्दे