Я пытаюсь перехватить исключения из набора тестов, которые я запускаю в разрабатываемом мной API, и использую Guzzle для использования методов API. У меня есть тесты, заключенные в блок try / catch, но он по-прежнему выдает необработанные ошибки исключения. Добавление прослушивателя событий, как описано в их документации, похоже, ничего не дает. Мне нужно получить ответы с кодами HTTP 500, 401, 400, фактически все, что не 200, поскольку система установит наиболее подходящий код на основе результата вызова, если он не сработал. .
Текущий пример кода
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;
}
Даже с конкретным блоком catch для выбранного типа исключения я все равно возвращаюсь
Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
и все выполнение на странице останавливается, как и следовало ожидать. Добавление ловушки BadResponseException позволило мне правильно поймать 404, но, похоже, это не работает для 500 или 401 ответа. Может ли кто-нибудь подсказать, где я ошибаюсь, пожалуйста.
use
исключения, вам может потребоваться префикс ``, чтобы явно указать класс FQ. Так, например, '\ Guzzle \ Http \ Exception \ ClientErrorResponseException'