an example in the QtWebkit documentation'a göre bir küçük resim üreteci yazıyorum. 404 not found
veya 503 Internal server error
gibi hata sayfalarının ekran görüntülerinden kaçınmak istiyorum. Ancak, QWebPage::loadFinished() sinyali, sayfa bir HTTP hatası verse bile, ok = true
ile her zaman yayımlanır. Bir yanıtta HTTP durum kodunu kontrol etmek için QtWebkit'te bir yol var mı?QtWebkit: HTTP durum kodu nasıl kontrol edilir?
9
A
cevap
14
QWebPage'inizle ilişkili QNetworkAccessManager numaralı telefonu izlemeniz ve finished(...) sinyalini beklemeniz gerekir. Daha sonra HTTP yanıtını inceleyebilir ve QNetworkRequest::HttpStatusCodeAttribute
özniteliğini sorarak durum kodunu kontrol edebilirsiniz.
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;
}
}
, mesela seçim NetworkErrors daha vardır:
daha iyi olur kodunda açıkladı TCP hataları veya HTTP 401 için.
2
Bu, bir taşıma projesinde kullanıyorum. Yanıtı kontrol eder ve istek yapıp yapmadığını geri almaya karar verir. vazgeçiyor parçası sürüyor ama ben yorum yapmamışlar
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;
}
FWIW, bir de QNetworkReply :: Özelliği ve QNetworkRequest :: HttpStatusCodeAttribute bkz: http doğrudan HTTP durum kodu sorgulayabilir. //doc.qt .nokia.com/4.7-enstantane/qnetworkreply.html # özelliği. – Macke
İstemediğiniz bir şey, bir web sayfasındaki her bir öğe için yüklenemeyen bu özelliği tetiklemektir; örneğin görüntüler ve JavaScript. İdeal olarak, muhtemelen sadece ana sayfanın kendisinin yüklenmemesine özen gösterirsiniz. –