Guzzle Curl错误没有尝试捕获语句(Laravel)

时间:2015-08-27 14:40:16

标签: php laravel curl laravel-4

在Laravel项目中,我需要调用API REST来删除远程数据。

我的问题是,当我收到错误时,我的 catch语句不会捕获Guzzle异常。我的代码如下:

try {
    $client = new \GuzzleHttp\Client();
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id);
    $status = $request->getStatusCode();
} catch (Exception $e) {
    var_dump($e);exit();
}

Laravel捕获了异常,但 catch 语句中却没有。 Guzzle抛出的例外是:

GuzzleHttp\Ring\Exception\ConnectException

在我的第3行脚本中出现,并且它没有在我的脚本中捕获。你能否给我一种捕捉Guzzle例外的方法

我应该表明我已经看过这些帖子,但我没有得到很好的答复: How to resolve cURL Error (7): couldn't connect to host?Catching cURL errors from Guzzle

5 个答案:

答案 0 :(得分:10)

当我使用

时,它与我合作
  

\ GuzzleHttp \异常\的ConnectException

而不是

  

\狂饮\ HTTP \异常\的ConnectException

答案 1 :(得分:2)

也许该异常不会扩展Exception类。您可能会尝试抓住它:

try {
    $client = new \GuzzleHttp\Client();
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id);
    $status = $request->getStatusCode();
} catch (\GuzzleHttp\Ring\Exception\ConnectException $e) {
    var_dump($e);exit();
} catch (Exception $e) {
    // ...
}

答案 2 :(得分:2)

我遇到了类似的问题并使用以下内容解决了这个问题。我使用了您的示例并给出了内联注释供您理解。

try {
    $client = new \GuzzleHttp\Client();
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id);
    $status = $request->getStatusCode();
    if($status == 200){
        $response = $response->json();

    }else{
        // The server responded with some error. You can throw back your exception
        // to the calling function or decide to handle it here

        throw new \Exception('Failed');
    }

} catch (\Guzzle\Http\Exception\ConnectException $e) {
    //Catch the guzzle connection errors over here.These errors are something 
    // like the connection failed or some other network error

    $response = json_encode((string)$e->getResponse()->getBody());
}

希望这有帮助!

答案 3 :(得分:1)

您可能意味着通过在catch语句或\Exception语句中添加反斜杠来捕获use Exception(在根命名空间中)。

答案 4 :(得分:0)

只需更新新Guzzle异常命名空间的答案

try {
    $client = new \GuzzleHttp\Client();
    $request = $client->delete(Config::get('REST_API').'/order-product/'.$id);
    $status = $request->getStatusCode();
} catch (\GuzzleHttp\Exception\ConnectException $e) {
    var_dump($e);exit();
}