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。理想情况下,您可能只关心主页本身是否未加载。