Api, который я вызываю, возвращает json-объект ошибок проверки с HTTP-кодом 400. Я реализовал клиент, используя библиотеку curl PHP, но при ошибке curl_exec
возвращает false. Как я могу получить тело ответа при ошибке?
Обратите внимание, что я устанавливаю curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
Вы можете CURLOPT_FAILONERROR
за один раз. И добавление кода ошибки в CURLOPT_HTTP200ALIASES
как и ожидалось, также может помочь.
curl_setopt($conn, CURLOPT_FAILONERROR, false); curl_setopt($conn, CURLOPT_HTTP200ALIASES, (array)400);
(libcurl также имеет CURLOPT_ERRORBUFFER
, но вы не можете использовать эту опцию из PHP.)
Btw, curl ведет себя правильно, не возвращая тело ответа в случае ошибок 4xx. Не уверен, что это может быть переоценено. Поэтому вам, возможно, придется перейти на PEAR HTTP_Request2
или аналогичный класс HTTP-запроса, где вы можете отклоняться от стандарта.
Я смог получить контент из ответа 400, установив FAILONERROR в false, без необходимости также псевдонимов 400 как обычный ответ 200.
Добавь это:
curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));