Код ошибки HTTP из TransferJob под KDE (KIO) - PullRequest
1 голос
/ 04 ноября 2019

Я запускаю задание HTTP GET в KDE 5 с 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 может использоваться для испытаний

1 Ответ

1 голос
/ 09 ноября 2019

Простой ответ: да, вы можете. Единственный вариант - TransferJob::isErrorPage(), чтобы узнать, произошла ли какая-либо ошибка. Согласно этой строке кода в transferjob.cpp

     q->connect(slave, &SlaveInterface::errorPage, q, [this]() {
         m_errorPage = true;
     });

Но если вы посмотрите на http.cpp в ioslaves , вы найдете эти метаданные со значением ключа код ответа добавлен к Job::metaData, поэтому вы можете запросить это значение следующим образом:

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

httpResponseCode будет QString, поскольку KIO::MetaData на самом деле QMap<QString,QString> тип.

...