Guzzle 如何在主机离线时处理 RequestException
Guzzle how to handle RequestException when host is offline
我在 laravel 框架内使用 Guzzle,但是当主机离线时,我得到一个异常,而不是您可以通过 getStatusCode()
获得的状态代码。我现在已经尝试捕获请求,但在这个方法之外我有一个检查状态码的方法。我的问题是如何 return 捕获正确的响应,以便我可以在此方法之外调用 getStatusCode()
.
我发出请求的代码如下所示:
public function makeRequest($method, $requestUrl, $queryParams = [])
{
try{
$client = new Client(['http_errors' => false]);
return $client->request($method, $requestUrl, [
'query' => $queryParams
]);
}catch(RequestException $exception){
LOG::info($exception->getMessage());
return $exception->getResponse();
}
}
你的想法(总是 return Response
来自方法的对象)在设计上不起作用。我的意思是你已经看到了,在某些情况下没有 Response
对象(例如,当无法建立与主机的连接时,所以在这种情况下 HTTP 流甚至不会启动,这就是为什么你不'没有任何 HTTP 状态代码)。
IMO 是让您的代码知道异常的最佳方法。不要试图在你的 makeRequest()
中处理它,让它进一步流动,直到你真正可以处理它的程度。
我在 laravel 框架内使用 Guzzle,但是当主机离线时,我得到一个异常,而不是您可以通过 getStatusCode()
获得的状态代码。我现在已经尝试捕获请求,但在这个方法之外我有一个检查状态码的方法。我的问题是如何 return 捕获正确的响应,以便我可以在此方法之外调用 getStatusCode()
.
我发出请求的代码如下所示:
public function makeRequest($method, $requestUrl, $queryParams = [])
{
try{
$client = new Client(['http_errors' => false]);
return $client->request($method, $requestUrl, [
'query' => $queryParams
]);
}catch(RequestException $exception){
LOG::info($exception->getMessage());
return $exception->getResponse();
}
}
你的想法(总是 return Response
来自方法的对象)在设计上不起作用。我的意思是你已经看到了,在某些情况下没有 Response
对象(例如,当无法建立与主机的连接时,所以在这种情况下 HTTP 流甚至不会启动,这就是为什么你不'没有任何 HTTP 状态代码)。
IMO 是让您的代码知道异常的最佳方法。不要试图在你的 makeRequest()
中处理它,让它进一步流动,直到你真正可以处理它的程度。