QtWebkit:如何检查HTTP状态代码?

Mar*_*tin 10 qt http-status-codes qtwebkit

我正在编写一个缩略图生成器,如QtWebkit文档中的示例所示.我想避免错误页面的截图,如404 not found503 Internal server error.

但是,即使页面发出HTTP错误,也始终发出QWebPage :: loadFinished()信号ok = true.QtWebkit中有没有办法检查响应的HTTP状态代码?

Mar*_*tin 15

事实证明,您需要监视与QWebPage关联的QNetworkAccessManager并等待完成(...)信号.然后,您可以通过询问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;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有更多NetworkErrors可供选择,例如TCP错误或HTTP 401.

  • FWIW,也可以使用QNetworkReply :: Attribute和QNetworkRequest :: HttpStatusCodeAttribute直接查询HTTP状态代码,请参阅http://doc.qt.nokia.com/4.7-snapshot/qnetworkreply.html#attribute. (5认同)