搜索

首页  >  问答  >  正文

捕获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粉511749537377 天前1178

全部回复(12)我来回复

  • P粉598140294

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

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

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

    回复
    0
  • 尊渡假赌尊渡假赌尊渡假赌

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

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

    回复
    0
  • 取消回复