Я бы сказал, что это зависит от того, для чего вы используете HTTPClient. Например, PayPal SDK использует HttpClient для передачи вызовов API на сервер PayPal, но не может проверить код ответа HTTP, когда это сделано. Я исправил свою копию так, что если код ответа не равен 200, он генерирует исключение PayPal FatalException с соответствующим сообщением. Это потому, что вызывающий абонент не интересуется HTML или какими-либо подробностями этого сообщения HTTP и даже не заинтересован в том факте, что мы используем HTTP в качестве транспорта. Если вызов успешен, тогда тело ответа содержит детали транзакции, которые извлекаются и помещаются в объект ответа; в противном случае он содержит HTML, который бесполезен. В данном случае HTTP - это всего лишь транспорт, поэтому определенные коды ответов указывают на ошибки, о которых можно сообщить, используя исключения. Поскольку это часть PayPal SDK, я использовал класс исключения PayPal. В какой-то другой системе или библиотеке я бы использовал подтип любых исключений, которые библиотека уже использует. Например, если бы я писал библиотеку GMail, которая обращается к учетным записям GMail, я, вероятно, создал бы класс GMailException и подкласс, который используется для различных типов исключений, с которыми сталкивается библиотека. Кроме того, вы можете использовать что-то вроде IOException .
Причина, по которой HttpClient заставляет вас проверять коды ответов, заключается в том, что ответ может быть полезен, даже если код ответа не равен 200. Некоторые веб-сайты размещают полезный текст на странице 404, либо предоставляя что-то полезное для пользователя, либо для поиска. Форма или просто полезное сообщение об ошибке. В зависимости от вашего варианта использования вы можете просто показать содержимое ответа, а не выдавать исключение.