Usando PHP curl, ¿cómo se obtiene el cuerpo de respuesta para una respuesta de 400?

El api al que estoy llamando devuelve un objeto json de errores de validación con el código HTTP 400. Implementé el cliente utilizando la biblioteca de rizos de PHP, pero en caso de error, curl_exec devuelve falso. ¿Cómo puedo obtener el cuerpo de respuesta en caso de error?

Tenga en cuenta que estoy configurando curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Puedes cancelar CURLOPT_FAILONERROR por una vez. Y también podría ayudar agregar su código de estado de error a CURLOPT_HTTP200ALIASES como se esperaba.

  curl_setopt($conn, CURLOPT_FAILONERROR, false); curl_setopt($conn, CURLOPT_HTTP200ALIASES, (array)400); 

(libcurl también tiene un CURLOPT_ERRORBUFFER , pero no puedes usar esa opción desde PHP).

Por cierto, el enrollamiento se comporta correctamente al no devolver el cuerpo de la respuesta en caso de errores 4xx. No estoy seguro de si eso puede ser anulado. Por lo tanto, es posible que tenga que migrar a PEAR HTTP_Request2 o una clase de solicitud HTTP similar donde puede desviarse del estándar.

Pude obtener contenido de una respuesta 400 configurando FAILONERROR en falso, SIN tener que tener también alias 400 como una respuesta normal 200.

Agrega esto:

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