Вы можете сбросить CURLOPT_FAILONERROR
за один раз. И добавление вашего кода ошибки в CURLOPT_HTTP200ALIASES
, как и ожидалось, также может помочь.
curl_setopt($conn, CURLOPT_FAILONERROR, false);
curl_setopt($conn, CURLOPT_HTTP200ALIASES, (array)400);
(libcurl также имеет CURLOPT_ERRORBUFFER
, но вы не можете использовать эту опцию из PHP.)
Кстати, curl работает правильно, не возвращая тело ответа в случае ошибок 4xx. Не уверен, что это можно переопределить. Поэтому вам, возможно, придется перейти на PEAR HTTP_Request2
или аналогичный класс HTTP-запросов, где вы можете отклониться от стандарта.