我正在使用PHP guzzle
我试过了
public static function get($url) {
$client = new Client();
try {
$res = $client->request('GET',$url);
$result = (string) $res->getBody();
$result = json_decode($result, true);
return $result;
}
catch (GuzzleHttp\Exception\ClientException $e) {
$response = $e->getResponse();
$responseBodyAsString = $response->getBody()->getContents();
}
}
我一直在
当Guzzle检测到400或500错误时如何防止崩溃?
我只是希望我的应用程序继续运行和加载。
答案 0 :(得分:5)
所以,我敢打赌你的get()
函数存在于像App\Http\Controllers
这样的命名空间中,这意味着:
catch (GuzzleHttp\Exception\ClientException $e) {
实际被解释为你写的:
catch (App\Http\Controllers\GuzzleHttp\Exception\ClientException $e) {
由于显而易见的原因,不会抛出任何例外情况。
您可以通过执行以下操作来修复命名空间问题:
catch (\GuzzleHttp\Exception\ClientException $e) {
(注意前导\
)或放置:
use GuzzleHttp\Exception\ClientException;
在namespace
声明之后位于文件顶部并仅捕获ClientException
。
答案 1 :(得分:1)
我会尝试这样的事情:
$scope.versionForm.ignoreRule
public static function get($url) {
try {
$client = new Client();
$res = $client->request('GET',$url);
$result = (string) $res->getBody();
$result = json_decode($result, true);
return $result;
}
catch (\Exception $e) {
if($e instanceof \GuzzleHttp\Exception\ClientException ){
$response = $e->getResponse();
$responseBodyAsString = $response->getBody()->getContents();
}
report($e);
return false;
}
}
辅助函数允许您使用异常处理程序的报告方法快速报告异常,而不会显示错误页面。
答案 2 :(得分:1)
另外,请查看http_errors
选项以禁用异常(如果您的应用程序是预期的情况,并且您希望自己专门处理所有响应)。
答案 3 :(得分:1)
而不是仅使用ClientException
您可以尝试 RequestException ,这将有助于处理错误的请求。
try {
// Your code here.
} catch (GuzzleHttp\Exception\RequestException $e) {
if ($e->hasResponse()) {
// Get response body
// Modify message as proper response
$message = $e->getResponse()->getBody();
return (string) $exception;
}
else {
return $e->getMessage();
}
}
答案 4 :(得分:0)
您可以通过以下方式捕获任何异常:
catch (\Exception $e)