Ich versuche, Ausnahmen von einer Reihe von Tests abzufangen, die ich auf einer von mir entwickelten API ausführe, und verwende Guzzle, um die API-Methoden zu verwenden. Ich habe die Tests in einen Try / Catch-Block eingeschlossen, aber es werden immer noch unbehandelte Ausnahmefehler ausgegeben. Das Hinzufügen eines Ereignis-Listeners, wie in den Dokumenten beschrieben, scheint nichts zu bewirken. Ich muss in der Lage sein, die Antworten mit HTTP-Codes von 500, 401, 400 abzurufen. Tatsächlich muss alles, was nicht 200 ist, da das System den am besten geeigneten Code basierend auf dem Ergebnis des Aufrufs festlegt, wenn es nicht funktioniert hat .
Aktuelles Codebeispiel
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;
}
Selbst mit dem spezifischen catch-Block für den ausgelösten Ausnahmetyp komme ich immer noch zurück
Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]
und alle Ausführung auf der Seite stoppt, wie Sie es erwarten würden. Durch das Hinzufügen des BadResponseException-Catch konnte ich 404s korrekt abfangen, dies scheint jedoch bei 500 oder 401 Antworten nicht zu funktionieren. Kann mir jemand vorschlagen, wo ich falsch liege?
use
müssen Sie ihnen möglicherweise ein Präfix voranstellen, um die FQ-Klasse explizit anzugeben , es sei denn, Sie geben die Ausnahmen an. So zum Beispiel '\ Guzzle \ Http \ Exception \ ClientErrorResponseException'