处理GuzzleHttp上的客户端错误异常

时间:2017-09-01 17:07:27

标签: laravel laravel-5 guzzle

我试图处理请求状态代码,基本上检查状态是否为200,以防它没有处理它。我使用名为“GuzzleHttp \ Client”的软件包,当有404时它给了我一个错误:

Client error: `GET https://api.someurl---` resulted in a `404 Not Found` response:
{"generated_at":"2017-09-01T16:59:25+00:00","schema":"","message":"No events scheduled for this date."}

但是在屏幕上显示的格式是我想要更改的,所以我试图抓住并在视图上给出不同的输出。但是没有工作,它仍然给我红屏错误。

try {
            $client = new \GuzzleHttp\Client();
            $request = $client->request('GET', $url);
            $status = $request->getStatusCode();
            if($status == 200){
                return $status;

            }else{

                throw new \Exception('Failed');
            }

        } catch (\GuzzleHttp\Exception\ConnectException $e) {
            //Catch errors
            return $e->getStatusCode();

        }

1 个答案:

答案 0 :(得分:4)

好的,如果你想坚持尝试捕捉,你想做这样的事情:

$client = new \GuzzleHttp\Client();

try {
    $request = $client->request('GET', $url);
} catch (\GuzzleHttp\Exception\ConnectException $e) {
    // This is will catch all connection timeouts
    // Handle accordinly
} catch (\GuzzleHttp\Exception\ClientException $e) {
    // This will catch all 400 level errors.
    return $e->getResponse()->getStatusCode();
}

$status = $request->getStatusCode();

如果捕获没有被触发,$request将成功,这意味着它的状态代码为200。 但是,为了捕获400错误,请确保在设置http_errors时将$client请求选项设置为true。