Guzzle 异常处理
在 API 测试期间尝试捕获 Guzzle 抛出的异常时,您遇到了持续存在的未处理异常错误,尽管实现了try/catch 块。让我们深入研究您的查询并探索一些实用的解决方案。
在您提供的代码片段中,您已包含事件侦听器来处理特定的 HTTP 响应代码(401、500 等)。但是,您在 try/catch 块中捕获的异常类型(ClientErrorResponseException、ServerErrorResponseException、BadResponseException)不够具体,无法封装 Guzzle 可能引发的所有可能的异常。
要解决此问题,一种方法是:方法是禁用 Guzzle 的异常,允许您访问所有状态代码而不触发异常。这可以通过向客户端添加以下配置来实现:
$client = new \Guzzle\Http\Client($httpBase, array( 'request.options' => array( 'exceptions' => false, ) ));
禁用异常后,您可以手动检查响应的状态代码并处理任何意外或错误的代码:
$request = $client->get($uri); $response = $request->send(); $statuscode = $response->getStatusCode(); if ($statuscode > 300) { // Handle error conditions }
或者,您可以显式定义预期的状态代码并相应地处理它们:
if (200 === $statuscode) { // Handle 200 OK } elseif (304 === $statuscode) { // Handle 304 Not Modified } elseif (404 === $statuscode) { // Handle 404 Not Found } else { throw new Exception("Invalid response from API..."); }
通过禁用异常并手动处理状态代码,您可以对错误处理进行精细控制,并可以适当地响应不同的 HTTP回复。
以上是为什么即使使用了 try/catch 块,我的 Guzzle 异常仍然未处理?的详细内容。更多信息请关注PHP中文网其他相关文章!