J'essaie d'attraper les exceptions d'un ensemble de tests que j'exécute sur une API que je développe et j'utilise Guzzle pour consommer les méthodes de l'API. J'ai placé les tests dans un bloc try/catch, mais les erreurs d'exception non gérées sont toujours présentes. L'ajout d'un écouteur d'événements tel que décrit dans la documentation ne semble rien faire. J'ai besoin de pouvoir récupérer les réponses qui ont des codes HTTP de 500, 401, 400, en fait tout ce qui n'est pas 200 car le système définira le code le plus approprié en fonction du résultat de l'appel s'il ne fonctionne pas.
Exemple de code actuel
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;
}
Même avec le bloc de capture spécifique pour le type d'exception lancé, j'obtiens toujours le résultat suivant
Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
et toute exécution sur la page s'arrête, comme on peut s'y attendre. L'ajout de la capture BadResponseException m'a permis d'attraper correctement les 404, mais cela ne semble pas fonctionner pour les réponses 500 ou 401. Quelqu'un peut-il me dire où je me trompe, s'il vous plaît ?