Détecter les exceptions Guzzle
P粉511749537
P粉511749537 2023-11-16 14:36:03
0
12
1151

J'essaie de détecter les exceptions dans un ensemble de tests exécutés sur une API que je développe et j'utilise Guzzle pour consommer des méthodes API. J'ai enveloppé le test dans un bloc try/catch mais il génère toujours une erreur d'exception non gérée. L'ajout d'un écouteur d'événements comme décrit dans leur documentation ne semble rien faire. Je dois pouvoir récupérer les réponses avec les codes HTTP 500, 401, 400, en fait toute réponse autre que 200, car si cela ne fonctionne pas, le système définira le code le plus approprié en fonction du résultat de l'appel.

Exemple de code actuel

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;

    }

Même avec un bloc catch spécifique qui lève le type d'exception, j'obtiens toujours un retour

Fatal error: Uncaught exception 'GuzzleHttpExceptionClientErrorResponseException' with message 'Client error response [status code] 401 [reason phrase] Unauthorized [url]

Comme vous vous en doutez, toute exécution sur la page s'arrête. L'ajout du catch BadResponseException me permet d'attraper 404 correctement, mais cela ne semble pas fonctionner avec 500 ou 401 réponses. Quelqu'un peut-il suggérer où je me trompe.

P粉511749537
P粉511749537

répondre à tous(12)
P粉598140294

Tout contenu non capturé doit être capturé s'il s'y trouve try 块中抛出异常,那么在最坏的情况下,Exception.

Considérez que la première partie du test consiste à lever l'exception et à l'envelopper dans un bloc try.

尊渡假赌尊渡假赌尊渡假赌

Oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui Oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui Oui, oui, oui, oui, oui, oui, oui, oui, oui , oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui , oui, oui, oui, oui, oui, oui, oui, oui Oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui, oui Oui

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal