在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
答案 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();
}