代码之家  ›  专栏  ›  技术社区  ›  code-8

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

  •  5
  • code-8  · 技术社区  · 7 年前

    我正在使用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

    我只想让我的应用程序继续运行和加载。

    5 回复  |  直到 7 年前
        1
  •  5
  •   ceejayoz    7 年前

    所以,我敢打赌 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 .

        2
  •  2
  •   Alexey Shokov    7 年前

    还可以看看 http_errors 完全禁用异常的选项(如果对于您的应用程序来说这是一个预期场景,并且您希望自己专门处理所有响应)。

        3
  •  2
  •   Arti Singh    5 年前

    你可以试试 请求异常 ,这将有助于处理错误的请求。

    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
  •  1
  •   Leo    7 年前

    我会尝试这样的方式:

    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;
        }
    
    }
    

    这个 report() helper函数允许您使用异常处理程序的报告方法快速报告异常,而无需呈现错误页面。

        5
  •  0
  •   Saeed Vaziry    7 年前

    您可以捕获以下任何异常:

    catch (\Exception $e)