Estoy tratando de detectar excepciones de un conjunto de pruebas que estoy ejecutando en una API que estoy desarrollando y estoy usando Guzzle para consumir los métodos de la API. Tengo las pruebas envueltas en un bloque try / catch pero todavía arroja errores de excepción no manejados. Agregar un detector de eventos como se describe en sus documentos no parece hacer nada. Necesito poder recuperar las respuestas que tienen códigos HTTP de 500, 401, 400, de hecho, cualquier cosa que no sea 200, ya que el sistema establecerá el código más apropiado según el resultado de la llamada si no funcionó .
Ejemplo de código actual
foreach($tests as $test){
$client = new Client($api_url);
$client->getEventDispatcher()->addListener('request.error', function(Event $event) {
if ($event['response']->getStatusCode() == 401) {
$newResponse = new Response($event['response']->getStatusCode());
$event['response'] = $newResponse;
$event->stopPropagation();
}
});
try {
$client->setDefaultOption('query', $query_string);
$request = $client->get($api_version . $test['method'], array(), isset($test['query'])?$test['query']:array());
// Do something with Guzzle.
$response = $request->send();
displayTest($request, $response);
}
catch (Guzzle\Http\Exception\ClientErrorResponseException $e) {
$req = $e->getRequest();
$resp =$e->getResponse();
displayTest($req,$resp);
}
catch (Guzzle\Http\Exception\ServerErrorResponseException $e) {
$req = $e->getRequest();
$resp =$e->getResponse();
displayTest($req,$resp);
}
catch (Guzzle\Http\Exception\BadResponseException $e) {
$req = $e->getRequest();
$resp =$e->getResponse();
displayTest($req,$resp);
}
catch( Exception $e){
echo "AGH!";
}
unset($client);
$client=null;
}
Incluso con el bloque de captura específico para el tipo de excepción lanzada, todavía estoy recuperando
Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
y toda la ejecución en la página se detiene, como era de esperar. La adición de la captura BadResponseException me permitió detectar 404 correctamente, pero esto no parece funcionar para respuestas 500 o 401. ¿Alguien puede sugerir dónde me estoy equivocando, por favor?
use
usando las excepciones, es posible que deba anteponerlas con `` para indicar explícitamente la clase FQ. Entonces, por ejemplo, '\ Guzzle \ Http \ Exception \ ClientErrorResponseException'