QtWebkit:如何检查HTTP状态代码?
我正在根据编写一个缩略图生成器。我希望避免出现错误页面的屏幕截图,例如QtWebkit:如何检查HTTP状态代码?,qt,http-status-codes,qtwebkit,Qt,Http Status Codes,Qtwebkit,我正在根据编写一个缩略图生成器。我希望避免出现错误页面的屏幕截图,例如404未找到或503内部服务器错误 但是,即使页面出现HTTP错误,该信号始终以ok=true发出。QtWebkit中是否有方法检查响应上的HTTP状态代码?结果表明,您需要监视与QWebPage关联的状态代码,并等待信号。然后,您可以通过询问QNetworkRequest::HttpStatusCodeAttribute属性来检查HTTP响应并检查其状态代码 最好用代码来解释: void MyClass::initWebPa
404未找到
或503内部服务器错误
但是,即使页面出现HTTP错误,该信号始终以
ok=true
发出。QtWebkit中是否有方法检查响应上的HTTP状态代码?结果表明,您需要监视与QWebPage关联的状态代码,并等待信号。然后,您可以通过询问QNetworkRequest::HttpStatusCodeAttribute
属性来检查HTTP响应并检查其状态代码
最好用代码来解释:
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;
}
}
还有更多选择,例如TCP错误或HTTP 401。这就是我在移植项目中使用的。它检查回复并决定是否开始撤回请求。后退部分正在进行中,但我保留了评论
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;
}
QNetworkReply*reply=qobject_cast(sender());
Q_检查_PTR(回复);
QVariant statusCode=回复->属性(QNetworkRequest::HttpStatusCodeAttribute);
如果(!statusCode.isNull()&&statusCode.toInt()>=400){
//无效的\u服务器\u响应\u回退;
qDebug()FWIW,您还可以使用QNetworkReply::Attribute和QNetworkRequest::HttpStatusCodeAttribute直接查询HTTP状态代码,请参阅。您可能不希望为未能加载的网页上的每个资产触发此函数,例如图像和JavaScript。理想情况下,您可能只关心主页本身是否未加载。