Я намагаюся вловити винятки з набору тестів, які я запускаю в 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'