Ich versuche, Ausnahmen in einer Reihe von Tests abzufangen, die auf einer von mir entwickelten API ausgeführt werden, und ich verwende Guzzle, um API-Methoden zu nutzen. Ich habe den Test in einen Try/Catch-Block eingeschlossen, aber er löst immer noch einen nicht behandelten Ausnahmefehler aus. Das Hinzufügen eines Ereignis-Listeners, wie in der Dokumentation beschrieben, scheint nichts zu bewirken. Ich muss in der Lage sein, Antworten mit den HTTP-Codes 500, 401, 400 abzurufen, und zwar jede Antwort, die nicht 200 ist, denn wenn das nicht funktioniert, legt das System basierend auf dem Ergebnis des Anrufs den am besten geeigneten Code fest.
Aktuelles Codebeispiel
foreach($tests as $test){ $client = new Client($api_url); $client->getEventDispatcher()->addLi stener('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 (GuzzleHttpExceptionClientErrorResponseException $e) { $req = $e->getRequest(); $resp =$e->getResponse(); displayTest($req,$resp); } catch (GuzzleHttpExceptionServerErrorResponseException $e) { $req = $e->getRequest(); $resp =$e->getResponse(); displayTest($req,$resp); } catch (GuzzleHttpExceptionBadResponseException $e) { $req = $e->getRequest(); $resp =$e->getResponse(); displayTest($req,$resp); } catch( Exception $e){ echo "AGH!"; } unset($client); $client=null; }
Selbst mit einem bestimmten Catch-Block, der den Ausnahmetyp auslöst, erhalte ich immer noch eine Rückgabe
Fatal error: Uncaught exception 'GuzzleHttpExceptionClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
Wie zu erwarten ist, wird die gesamte Ausführung auf der Seite gestoppt. Durch das Hinzufügen des BadResponseException-Catchs kann ich 404 korrekt abfangen, aber das scheint bei 500- oder 401-Antworten nicht zu funktionieren. Kann jemand vorschlagen, wo ich falsch liege?
如果在该
try
块中抛出异常,那么在最坏的情况下,Exception
应该捕获任何未捕获的内容。考虑测试的第一部分是抛出异常并将其包装在
try
块中。阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是