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()
等于 true
。 data
包含类似的内容:
<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>
类型。
我正在 KDE 5 下启动 HTTP GET 作业
job = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo);
在连接到 KIO::TransferJob::result
的插槽中,我得到 job->error()
等于 0,但 KIO::TransferJob::isErrorPage()
等于 true
。 data
包含类似的内容:
<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>
类型。