Используя PHP curl, как получить тело ответа для ответа 400 - PullRequest
16 голосов
/ 16 июня 2011

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

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

Ответы [ 3 ]

21 голосов
/ 16 июня 2011

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

7 голосов
/ 18 февраля 2015

Мне удалось получить контент из ответа 400, установив для FAILONERROR значение false, БЕЗ необходимости указывать псевдоним 400 в качестве обычного ответа 200.

4 голосов
/ 16 июня 2011

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

curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...