Maison  >  Questions et réponses  >  le corps du texte

Détecter les exceptions Guzzle

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粉511749537P粉511749537312 Il y a quelques jours1007

répondre à tous(12)je répondrai

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

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:15:06

    Trois transformations majeures***Trois transformations majeures du salaire cuiseur à riz***Trois transformations majeures du salaire cuiseur à riz***Trois transformations majeures du salaire cuiseur à riz***Trois transformations majeures du salaire cuiseur à riz***Salaire riz trois Transformations majeures du cuiseur à riz salarial Pot***

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:14:13

    Afan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah le salarié vanne papillon manuelle Ah Fan Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle vanne Ah Fan VS Ah pari vanne papillon manuelle

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:13:10

    Afan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah la vanne papillon manuelle du salarié Ah Fan VS Ah le salarié vanne papillon manuelle Ah Fan Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle Ah Fan VS Ah pari vanne papillon manuelle vanne Ah Fan VS Ah pari vanne papillon manuelle

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:12:11

    Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:11:23

    Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:10:26

    Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:08:15

    Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai, Maître Ai

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:06:56

    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

    répondre
    0
  • P粉701491897

    P粉7014918972023-11-17 14:08:04

    En fonction de votre projet, vous devrez peut-être désactiver les exceptions Guzzle. Parfois, les règles de codage n'autorisent pas les exceptions de contrôle de flux. Vous pouvez désactiver les exceptions pour Guzzle 3 comme suit :

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

    Cela ne désactive pas les exceptions curl telles que les délais d'attente, mais vous pouvez désormais facilement obtenir chaque code d'état :

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

    Pour vérifier si vous avez un code valide, vous pouvez utiliser quelque chose comme ceci :

    if ($statuscode > 300) {
      // Do some error handling
    }

    ...ou mieux encore, gérez tout le code attendu :

    if (200 === $statuscode) {
      // Do something
    }
    elseif (304 === $statuscode) {
      // Nothing to do
    }
    elseif (404 === $statuscode) {
      // Clean up DB or something like this
    }
    else {
      throw new MyException("Invalid response from api...");
    }

    Pour Guzzle 5.3

    $client = new \GuzzleHttp\Client(['defaults' => [ 'exceptions' => false ]] );

    Merci @mika

    Guzzle 6

    $client = new \GuzzleHttp\Client(['http_errors' => false]);

    répondre
    0
  • 尊渡假赌尊渡假赌尊渡假赌

    尊渡假赌尊渡假赌尊渡假赌2023-11-17 16:05:35

    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

    répondre
    0
  • Annulerrépondre