【发布时间】:2019-06-19 02:20:58
【问题描述】:
我正在为自己编写一个小应用程序。此应用程序正在使用包Guzzle 调用不同的网站。
但是,我想将每个请求与时间和请求持续时间以及我获得的请求状态代码一起存储在我的数据库中。我现在在这里面临的问题是我不知道在请求失败时如何获取http状态码..
这是我目前的代码:
$client = $this->getGuzzleClient();
$request = $client->post($url, $headers, $value);
try {
$response = $request->send();
return $response->getBody();
}catch (\GuzzleHttp\Exception\RequestException $e){
dd(array($e, $e->getResponse()));
}
$e->getResponse() 返回null。我也尝试使用$e->getStatusCode() 或$e->getRequest()->getStatusCode()。两者都不工作......
为了绝对确定请求是有效的,我会处理一个真正的例外,我打电话给这个网站https://httpstat.us/503。这会返回一个 503 http 状态码...
那么,我怎样才能得到http状态码呢?你们有什么想法吗?
诚挚的问候和感谢!
【问题讨论】:
-
$e->getRequest()->getBody()->getContents()返回 null 并且$e->getCode()返回0尽管网站肯定会返回503错误。 -
尝试捕捉
ServerException或BadResponseException而不是RequestException -
为什么?但是如果不是
ServerException或BadResponseException会发生什么?那我就不能捕捉到其他异常了? -
如果你捕捉到一个
ServerException,你捕捉到一个 5xx,如果代码执行进入那里,Guzzle 已经收到一个 5xx。如果您发现RequestException也包含网络错误。如果代码执行在RequestException上进入但在ServerException上没有进入则意味着对于Guzzle来说不是5xx错误而是网络错误。
标签: php laravel exception-handling guzzle http-status-codes