2010-12-01 12 views
9

मैं an example in the QtWebkit documentation के अनुसार एक थंबनेल जनरेटर लिख रहा हूं। मैं 404 not found या 503 Internal server error जैसे त्रुटि पृष्ठों के स्क्रीनशॉट से बचना चाहता हूं।QtWebkit: HTTP स्थिति कोड कैसे जांचें?

हालांकि, QWebPage::loadFinished() सिग्नल हमेशा ok = true के साथ उत्सर्जित होता है जब भी पृष्ठ HTTP त्रुटि देता है। प्रतिक्रिया पर HTTP स्थिति कोड की जांच करने के लिए QtWebkit में कोई तरीका है?

उत्तर

14

बाहर कर देता है आप QNetworkAccessManager अपने QWebPage के साथ जुड़े पर नजर रखने और एक finished(...) संकेत के लिए प्रतीक्षा करने की जरूरत है। फिर आप HTTP प्रतिक्रिया का निरीक्षण कर सकते हैं और QNetworkRequest::HttpStatusCodeAttribute विशेषता के लिए अपने स्टेटस कोड की जांच कर सकते हैं।

void MyClass::initWebPage() 
{ 
    myQWebPage = new QWebPage(this); 
    connect(
    myQWebPage->networkAccessManager(), SIGNAL(finished(QNetworkReply *)), 
    this, SLOT(httpResponseFinished(QNetworkReply *)) 
); 
} 

void MyClass::httpResponseFinished(QNetworkReply * reply) 
{ 
    switch (reply->error()) 
    { 
    case QNetworkReply::NoError: 
     // No error 
     return; 
    case QNetworkReply::ContentNotFoundError: 
     // 404 Not found 
     failedUrl = reply->request.url(); 
     httpStatus = reply->attribute(
     QNetworkRequest::HttpStatusCodeAttribute).toInt(); 
     httpStatusMessage = reply->attribute(
     QNetworkRequest::HttpReasonPhraseAttribute).toByteArray(); 
     break; 
    } 
} 

अधिक NetworkErrors, उदा से चुनने के लिए कर रहे हैं:

यह बेहतर है कोड में विस्तार से बताया टीसीपी त्रुटियों या HTTP 401 के लिए।

+5

Fwiw, एक भी HTTP स्थिति कोड सीधे QNetworkReply :: गुण और QNetworkRequest :: HttpStatusCodeAttribute, देखें http साथ क्वेरी कर सकते हैं:। //doc.qt .nokia.com/4.7-स्नैपशॉट/qnetworkreply.html # विशेषता। – Macke

+0

एक चीज जो आप नहीं चाहें वह इस वेब को प्रत्येक पृष्ठ के लिए एक वेब पेज पर ट्रिगर करना है जो लोड करने में विफल रहता है; उदाहरण के लिए छवियों और जावास्क्रिप्ट। आदर्श रूप से आप शायद केवल तभी देखभाल करते हैं जब मुख्य पृष्ठ स्वयं लोड नहीं होता है। –

2

यही वह है जो मैं एक पोर्टिंग प्रोजेक्ट में उपयोग कर रहा हूं। यह उत्तर की जांच करता है और अनुरोध करने का समर्थन करने का समर्थन करता है या नहीं। समर्थन बंद भाग का कार्य प्रगति पर है, लेकिन मैं टिप्पणी छोड़

QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender()); 
Q_CHECK_PTR(reply); 

QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); 
if (!statusCode.isNull() && statusCode.toInt() >= 400){ 
    //INVALID_SERVER_RESPONSE_BACKOFF; 
    qDebug() << "server returned invalid response." << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); 
    return; 
}else if (!statusCode.isNull() && statusCode.toInt() != 200){ 
    //INVALID_SERVER_RESPONSE_NOBACKOFF; 
    qDebug() << "server returned invalid response." << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); 
    return; 
} 
संबंधित मुद्दे