Heim  >  Fragen und Antworten  >  Hauptteil

Guzzle-Ausnahmen abfangen

Ich versuche, Ausnahmen in einer Reihe von Tests abzufangen, die auf einer von mir entwickelten API ausgeführt werden, und ich verwende Guzzle, um API-Methoden zu nutzen. Ich habe den Test in einen Try/Catch-Block eingeschlossen, aber er löst immer noch einen nicht behandelten Ausnahmefehler aus. Das Hinzufügen eines Ereignis-Listeners, wie in der Dokumentation beschrieben, scheint nichts zu bewirken. Ich muss in der Lage sein, Antworten mit den HTTP-Codes 500, 401, 400 abzurufen, und zwar jede Antwort, die nicht 200 ist, denn wenn das nicht funktioniert, legt das System basierend auf dem Ergebnis des Anrufs den am besten geeigneten Code fest.

Aktuelles Codebeispiel

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;

    }

Selbst mit einem bestimmten Catch-Block, der den Ausnahmetyp auslöst, erhalte ich immer noch eine Rückgabe

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

Wie zu erwarten ist, wird die gesamte Ausführung auf der Seite gestoppt. Durch das Hinzufügen des BadResponseException-Catchs kann ich 404 korrekt abfangen, aber das scheint bei 500- oder 401-Antworten nicht zu funktionieren. Kann jemand vorschlagen, wo ich falsch liege?

P粉511749537P粉511749537312 Tage vor1002

Antworte allen(12)Ich werde antworten

  • P粉598140294

    P粉5981402942023-11-17 13:38:05

    如果在该 try 块中抛出异常,那么在最坏的情况下,Exception 应该捕获任何未捕获的内容。

    考虑测试的第一部分是抛出异常并将其包装在 try 块中。

    Antwort
    0
  • 尊渡假赌尊渡假赌尊渡假赌

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

    阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是阿是

    Antwort
    0
  • StornierenAntwort