В данной статье мы рассмотрим проблему, с которой сталкиваются разработчики при использовании компонента TIdHTTP из библиотеки Indy в ситуации, когда сервер возвращает наборный ответ (custom response) с ошибкой 404, и необходимо получить содержание этого ответа в коде на языке Object Pascal.
Проблема
При использовании TIdHTTP для отправки запроса, сервер возвращает кастомный ответ с ошибкой 404, включающий в себя подробные данные об ошибке. Однако, вместо получения тела ответа, TIdHTTP генерирует исключение EIdHTTPProtocolException с кодом состояния HTTP/1.1 404 Not Found. Это происходит, несмотря на возможность отключения генерации исключения через установку флага hoNoProtocolErrorException. Вместо исключения, тело ответа оказывается пустым.
Решение
Для получения тела ответа при ошибке 404, необходимо установить флаг hoWantProtocolErrorContent в свойство HTTPOptions компонента TIdHTTP. Это позволит сохранить тело ответа в целевой поток, вместо его игнорирования.
Если обновление компонентов недоступно, можно перехватить исключение EIdHTTPProtocolException и извлечь тело ответа из свойства ErrorMessage исключения.
Проблема получения тела ответа при ошибке 404 в TIdHTTP решается путем установки необходимого флага в свойство HTTPOptions. Для старых версий Indy можно использовать альтернативный подход с перехватом исключения и извлечением данных из свойства ErrorMessage. Это позволяет разработчикам продолжать работу с устаревшими версиями компонентов, пока не будет возможен их обновление.
Статья описывает проблему и решение для получения текста ошибки 404, возвращаемого сервером при использовании компонента TIdHTTP в среде разработки Delphi, когда стандартные методы не позволяют корректно обработать тело ответа с ошибкой.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS