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