当Guzzle检测到400或500错误时如何防止崩溃?

时间:2017-10-18 19:23:31

标签: php laravel laravel-5 guzzle

我正在使用PHP guzzle

我试过了

public static function get($url) {

    $client = new Client();

    try {
        $res = $client->request('GET',$url);
        $result = (string) $res->getBody();
        $result = json_decode($result, true);
        return $result;
    }
    catch (GuzzleHttp\Exception\ClientException $e) {
        $response = $e->getResponse();
        $responseBodyAsString = $response->getBody()->getContents();
    }

}

我一直在

enter image description here

当Guzzle检测到400或500错误时如何防止崩溃?

我只是希望我的应用程序继续运行和加载。

5 个答案:

答案 0 :(得分:5)

所以,我敢打赌你的get()函数存在于像App\Http\Controllers这样的命名空间中,这意味着:

catch (GuzzleHttp\Exception\ClientException $e) {

实际被解释为你写的:

catch (App\Http\Controllers\GuzzleHttp\Exception\ClientException $e) {

由于显而易见的原因,不会抛出任何例外情况。

您可以通过执行以下操作来修复命名空间问题:

catch (\GuzzleHttp\Exception\ClientException $e) {

(注意前导\)或放置:

use GuzzleHttp\Exception\ClientException;
namespace声明之后

位于文件顶部并仅捕获ClientException

请参阅http://php.net/manual/en/language.namespaces.basics.php

答案 1 :(得分:1)

我会尝试这样的事情:

$scope.versionForm.ignoreRule

public static function get($url) { try { $client = new Client(); $res = $client->request('GET',$url); $result = (string) $res->getBody(); $result = json_decode($result, true); return $result; } catch (\Exception $e) { if($e instanceof \GuzzleHttp\Exception\ClientException ){ $response = $e->getResponse(); $responseBodyAsString = $response->getBody()->getContents(); } report($e); return false; } } 辅助函数允许您使用异常处理程序的报告方法快速报告异常,而不会显示错误页面。

答案 2 :(得分:1)

另外,请查看http_errors选项以禁用异常(如果您的应用程序是预期的情况,并且您希望自己专门处理所有响应)。

答案 3 :(得分:1)

而不是仅使用ClientException

您可以尝试 RequestException ,这将有助于处理错误的请求。

try {
    // Your code here. 
} catch (GuzzleHttp\Exception\RequestException $e) {
    if ($e->hasResponse()) {
        // Get response body
        // Modify message as proper response
        $message = $e->getResponse()->getBody();
        return (string) $exception;
     }
    else {
        return $e->getMessage();
    }
}

答案 4 :(得分:0)

您可以通过以下方式捕获任何异常:

catch (\Exception $e)