Guzzleでリクエスト先からエラーが返された際、そのメッセージがtruncateされてしまい、不都合な場合があります。今回は、このメッセージをtruncateされない状態で取得してみます。
PHP Fatal error: Uncaught GuzzleHttp\Exception\ServerException: Server error: `POST https://hoge.local/upload` resulted in a `500 Internal Server Error` response:
{"error":{"code":500,"message":"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u62 (truncated...)
in /hoge/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
対応方法
次のコードのように、catch側に $e->getResponse()->getBody()->getContents()
を書くことで取得することが可能です。
コード
try {
$res = $client->request('POST', $url, [
・・・
]);
} catch (Exception $e) {
var_dump(json_decode($e->getResponse()->getBody()->getContents()));
}
結果
object(stdClass)#10 (1) {
["error"]=>
object(stdClass)#34 (2) {
["code"]=>
int(500)
["message"]=>
string(67) "アップロードするファイルを選択してください。"
}
}