Próbuję wyłapać wyjątki z zestawu testów, które uruchamiam w API, które tworzę i używam Guzzle do korzystania z metod API. Mam testy opakowane w blok try / catch, ale nadal generują nieobsłużone błędy wyjątków. Dodanie detektora zdarzeń zgodnie z opisem w ich dokumentach wydaje się nic nie robić. Muszę być w stanie pobrać odpowiedzi, które mają kody HTTP 500, 401, 400, w rzeczywistości wszystko, co nie jest 200, ponieważ system ustawi najbardziej odpowiedni kod na podstawie wyniku połączenia, jeśli to nie zadziała .
Aktualny przykład kodu
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;
}
Nawet z konkretnym blokiem catch dla typu rzuconego wyjątku wciąż wracam
Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
i jak można się spodziewać, wszystkie operacje na stronie zostają zatrzymane. Dodanie złapania BadResponseException pozwoliło mi poprawnie wyłapać 404, ale wydaje się, że nie działa to dla odpowiedzi 500 lub 401. Czy ktoś może zasugerować, gdzie idę źle?
use
wyjątki, być może będziesz musiał poprzedzić je znakiem ``, aby jawnie określić klasę FQ. Na przykład „\ Guzzle \ Http \ Exception \ ClientErrorResponseException”