KDE (KIO) 下 TransferJob 的 HTTP 错误代码

HTTP Error code from TransferJob under KDE (KIO)

我正在 KDE 5 下启动 HTTP GET 作业 job = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo);

在连接到 KIO::TransferJob::result 的插槽中,我得到 job->error() 等于 0,但 KIO::TransferJob::isErrorPage() 等于 truedata 包含类似的内容:

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
</body>
</html>

据我了解 - 从属 http 作业表明该页面是一个错误页面,但此错误的代码未转发给父作业,或者我找不到获取它的方法。我想在不解析接收到的数据的情况下获取代码(403)。这可能吗?

https://httpstat.us/403 可用于测试

简单的回答是可以。 唯一的选择是 TransferJob::isErrorPage() 以了解是否发生任何错误。根据 transferjob.cpp

中的这一行代码
     q->connect(slave, &SlaveInterface::errorPage, q, [this]() {
         m_errorPage = true;
     });

但是如果你查看 ioslaves 中的 http.cpp,你会发现元数据的键值为 responsecode 被添加到 Job::metaData 中,因此您可以像这样查询该值:

auto httpResponseCode = job->metaData().value(QStringLiteral("responsecode"));

httpResponseCode 会是 QString 因为 KIO::MetaData 实际上是 QMap<QString,QString> 类型。