개발중인 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 catch를 추가하여 404를 올바르게 잡을 수 있었지만 500 또는 401 응답에 대해서는 작동하지 않는 것 같습니다. 누구든지 내가 어디로 잘못 가고 있는지 제안 할 수 있습니까?
use
예외를 지정 하지 않는 한 FQ 클래스를 명시 적으로 설명하기 위해 ''접두사를 붙여야 할 수 있습니다. 따라서, 예를 들어, '\ 목구멍 \ HTTP를 \ 예외 \ ClientErrorResponseException'