虽然上面的答案是好的,但它们不会处理网络错误,因为Mark提到BadResponseException只是ClientException和ServerException的超类。 但RequestException也是BadRequestException的超类。 这不仅会捕获400和500错误,还会捕获网络错误。 所以,假设您要求下面的页面,但您的网络正在播放,您的捕获期待BadResponseException。 那么你的应用程序将抛出错误。
在这种情况下,最好是期望RequestException并检查响应。
try {
$client->get('http://123123123.com')
} catch (RequestException $e) {
// If there are network errors, we need to ensure the application doesn't crash.
// if $e->hasResponse is not null we can attempt to get the message
// Otherwise, we'll just pass a network unavailable message.
if ($e->hasResponse()) {
$exception = (string) $e->getResponse()->getBody();
$exception = json_decode($exception);
return new JsonResponse($exception, $e->getCode());
} else {
return new JsonResponse($e->getMessage(), 503);
}
}