Heim  >  Artikel  >  Backend-Entwicklung  >  Warum werden meine Guzzle-Ausnahmen trotz eines Try/Catch-Blocks immer noch nicht behandelt?

Warum werden meine Guzzle-Ausnahmen trotz eines Try/Catch-Blocks immer noch nicht behandelt?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 00:46:02326Durchsuche

Why Are My Guzzle Exceptions Still Unhandled Even With a try/catch Block?

Guzzle-Ausnahmebehandlung

Bei Ihrem Versuch, von Guzzle während des API-Tests ausgelöste Ausnahmen abzufangen, sind Sie trotz der Implementierung auf anhaltende, nicht behandelte Ausnahmefehler gestoßen ein Try/Catch-Block. Lassen Sie uns Ihre Anfrage genauer untersuchen und einige praktische Lösungen erkunden.

In das von Ihnen bereitgestellte Code-Snippet haben Sie Ereignis-Listener eingefügt, um bestimmte HTTP-Antwortcodes (401, 500 usw.) zu verarbeiten. Allerdings sind die Ausnahmetypen, die Sie im try/catch-Block abfangen (ClientErrorResponseException, ServerErrorResponseException, BadResponseException), nicht spezifisch genug, um alle möglichen Ausnahmen zu kapseln, die von Guzzle ausgelöst werden könnten.

Um dieses Problem zu beheben, eine Der Ansatz besteht darin, Ausnahmen für Guzzle zu deaktivieren, sodass Sie auf alle Statuscodes zugreifen können, ohne Ausnahmen auszulösen. Dies kann erreicht werden, indem Sie die folgende Konfiguration zu Ihrem Client hinzufügen:

$client = new \Guzzle\Http\Client($httpBase, array(
  'request.options' => array(
     'exceptions' => false,
   )
));

Wenn Ausnahmen deaktiviert sind, können Sie den Statuscode der Antwort manuell überprüfen und alle unerwarteten oder fehlerhaften Codes behandeln:

$request = $client->get($uri);
$response = $request->send();
$statuscode = $response->getStatusCode();

if ($statuscode > 300) {
  // Handle error conditions
}

Alternativ können Sie die erwarteten Statuscodes explizit definieren und entsprechend behandeln:

if (200 === $statuscode) {
  // Handle 200 OK
}
elseif (304 === $statuscode) {
  // Handle 304 Not Modified
}
elseif (404 === $statuscode) {
  // Handle 404 Not Found
}
else {
  throw new Exception("Invalid response from API...");
}

Durch das Deaktivieren von Ausnahmen und die manuelle Behandlung von Statuscodes erhalten Sie eine detaillierte Kontrolle über die Fehlerbehandlung und können angemessen auf verschiedene HTTP-Anforderungen reagieren Antworten.

Das obige ist der detaillierte Inhalt vonWarum werden meine Guzzle-Ausnahmen trotz eines Try/Catch-Blocks immer noch nicht behandelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn