在使用 Guzzle 测试 API 时捕获异常可能具有挑战性。本文解决了这个问题,并提供了检索非 200 HTTP 代码响应的解决方案。
示例代码中使用事件监听器来处理特定的 HTTP 代码,但仍然会抛出异常。要解决此问题,一种选择是通过 HTTP 状态代码处理异常。
对于 Guzzle 3 和 Guzzle 5.3,禁用异常允许手动处理所有状态代码。只需设置“例外”=>客户端选项中为 false。
Guzzle 3
$client = new \Guzzle\Http\Client($httpBase, array( 'request.options' => array( 'exceptions' => false, ) ));
Guzzle 5.3
$client = new \GuzzleHttp\Client(['defaults' => [ 'exceptions' => false ]] );
禁用例外情况, HTTP状态码可以直接从响应中获取。
$response = $request->send(); $statuscode = $response->getStatusCode();
预期的状态码可以进行相应处理:
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..."); }
Guzzle 6
在 Guzzle 6 中,使用 'http_errors' =>客户端选项中为 false:
$client = new \GuzzleHttp\Client(['http_errors' => false]);
以上是测试 API 时如何处理 Guzzle 中未处理的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!