Использование curl PHP, как получить тело ответа для ответа 400

Api, который я вызываю, возвращает json-объект ошибок проверки с кодом HTTP 400. Я реализовал клиент, используя PHP curl library, но при ошибке curl_exec возвращает false. Как я могу получить тело ответа при ошибке?

Обратите внимание, что я устанавливаю curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Ответ 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-запроса, где вы можете отклоняться от стандарта.

Ответ 2

Я смог получить контент из ответа 400, установив для FAILONERROR значение false, не имея также псевдонима 400 как обычный ответ 200.

Ответ 3

Добавьте это:

curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));