首頁  >  問答  >  主體

捕獲Guzzle的異常

我正在嘗試捕獲在我正在開發的 API 上運行的一組測試中的異常,並且我正在使用 Guzzle 來使用 API 方法。我已經將測試包裝在 try/catch 區塊中,但它仍然拋出未處理的異常錯誤。按照他們的文檔中的描述添加事件監 聽器似乎沒有做任何事情。我需要能夠檢索 HTTP 代碼為 500、401、400 的回應,實際上任何不是 200 的回應,因為如果不起作用,系統將根據呼叫結果設定最合適的代碼.

目前程式碼範例

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;

    }

即使使用拋出異常類型的特定 catch 區塊,我仍然會回傳

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

如您所料,頁面上的所有執行都會停止。添加 BadResponseException 捕獲允許我正確捕獲 404,但這似乎不適用於 500 或 401 響應。誰能建議我哪裡出錯了。

P粉511749537P粉511749537361 天前1139

全部回覆(12)我來回復

  • P粉598140294

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

    如果在該 try 區塊中拋出異常,那麼在最壞的情況下,Exception 應該會捕獲任何未捕獲的內容。

    考慮測試的第一部分是拋出異常並將其包裝在 try 區塊中。

    回覆
    0
  • 尊渡假赌尊渡假赌尊渡假赌

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

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

    回覆
    0
  • 取消回覆