Maison >développement back-end >tutoriel php >Pourquoi mes exceptions Guzzle ne sont-elles toujours pas gérées même avec un bloc try/catch ?

Pourquoi mes exceptions Guzzle ne sont-elles toujours pas gérées même avec un bloc try/catch ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 00:46:02389parcourir

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

Gestion des exceptions Guzzle

Dans votre tentative d'intercepter les exceptions lancées par Guzzle lors des tests de l'API, vous avez rencontré des erreurs d'exception persistantes non gérées malgré la mise en œuvre un bloc try/catch. Examinons votre requête et explorons quelques solutions pratiques.

Dans l'extrait de code que vous avez fourni, vous avez inclus des écouteurs d'événements pour gérer les codes de réponse HTTP spécifiques (401, 500, etc.). Cependant, les types d'exceptions que vous interceptez dans le bloc try/catch (ClientErrorResponseException, ServerErrorResponseException, BadResponseException) ne sont pas suffisamment spécifiques pour encapsuler toutes les exceptions possibles qui pourraient être levées par Guzzle.

Pour résoudre ce problème, un L'approche consiste à désactiver les exceptions pour Guzzle, vous permettant d'accéder à tous les codes d'état sans déclencher d'exceptions. Ceci peut être réalisé en ajoutant la configuration suivante à votre client :

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

Les exceptions étant désactivées, vous pouvez vérifier manuellement le code d'état de la réponse et gérer tout code inattendu ou erroné :

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

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

Vous pouvez également définir explicitement les codes d'état attendus et les gérer en conséquence :

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...");
}

En désactivant les exceptions et en gérant manuellement les codes d'état, vous obtenez un contrôle granulaire sur la gestion des erreurs et pouvez répondre de manière appropriée aux différents HTTP réponses.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn