2011-08-28 17 views
6

के तहत मैं एक n00b समस्या की तरह है, मैं बनाने के लिए नहीं कर पा रहे HTTP GET मेरी क्यूटी कोड से अनुरोध ...बनाना एक HTTP GET क्यूटी

यहाँ काम करने वाले कोड है:

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

void MainWindow::requestReceived(QNetworkReply* reply){ 
    QString replyText; 
    replyText.fromAscii(reply->readAll()); 

    ui->txt_debug->appendPlainText(replyText); 
} 
requestReceived(QNetworkReply* reply) में, replyText खाली, reply->error() रिटर्न 0 और reply->errorString() रिटर्न "अज्ञात त्रुटि" लगता है:

लेकिन समस्या यह है कि यह सिर्फ काम नहीं करता है। मुझे वास्तव में पता नहीं है कि अभी क्या करना है ...

कोई विचार?

उत्तर

9

स्पष्ट रूप से एक पुनर्निर्देशन है, जिसे एक त्रुटि के रूप में नहीं माना जाता है।
आप जबाब में प्रदान की पुनर्निर्देशन यूआरएल साथ एक नया अनुरोध चलाना चाहिए जिम्मेदार बताते हैं जब तक आप असली पेज मिलती है:

void MainWindow::requestReceived(QNetworkReply *reply) 
{ 
    reply->deleteLater(); 

    if(reply->error() == QNetworkReply::NoError) { 
     // Get the http status code 
     int v = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 
     if (v >= 200 && v < 300) // Success 
     { 
      // Here we got the final reply 
      QString replyText = reply->readAll(); 
      ui->txt_debug->appendPlainText(replyText); 
     } 
     else if (v >= 300 && v < 400) // Redirection 
     { 
      // Get the redirection url 
      QUrl newUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); 
      // Because the redirection url can be relative, 
      // we have to use the previous one to resolve it 
      newUrl = reply->url().resolved(newUrl); 

      QNetworkAccessManager *manager = reply->manager(); 
      QNetworkRequest redirection(newUrl); 
      QNetworkReply *newReply = manager->get(redirection); 

      return; // to keep the manager for the next request 
     } 
    } 
    else 
    { 
     // Error 
     ui->txt_debug->appendPlainText(reply->errorString()); 
    } 

    reply->manager()->deleteLater(); 
} 

तुम भी रिकॉर्ड चाहिए तुम कहाँ पुनः निर्देशित कर रहे या न खत्म होने वाली कभी नहीं से बचने के लिए पुनर्निर्देशन की संख्या की गणना, लूप।

+1

आपको बहुत बहुत धन्यवाद! आपका समाधान एक आकर्षण की तरह काम करता है! मैं इसे कभी कठिन नहीं करता ... –

+0

@alexisdm हाय, मुझे इसके लिए एक ही समस्या हो रही थी, मेरे यूआरएल को छोड़कर रीडायरेक्ट किया गया है, इसके अलावा पोस्ट डेटा भी है, क्या इस कोड के समान कुछ भी है जो इसके लिए काम करेगा? – thnkwthprtls

0

यदि reply->error() = 0, इसका मतलब है कि अनुरोध सफल रहा। असल में, आपका कोड मेरे लिए सही लगता है, और एकमात्र चीज जो मैं अलग-अलग करता हूं वह डेटा को पढ़ना है। इसके साथ प्रयास करें:

QByteArray rawData = reply->readAll(); 
QString textData(rawData); 
qDebug() << textData; 
संबंधित मुद्दे