Guzzleの例外を処理し、HTTPボディを取得する
サーバーが4xxや5xxのステータスコードを返したときに、Guzzleからエラーを処理したいと思います。私はこのようなリクエストをします:
$client = $this->getGuzzleClient();
$request = $client->post($url, $headers, $value);
try {
$response = $request->send();
return $response->getBody();
} catch (\Exception $e) {
// How can I get the response body?
}
$e->getMessage` はコード情報を返しますが、HTTP レスポンスのボディを返しません。どうすればレスポンスボディを取得できますか?
100
4
ガズル 6.x
docs](http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions)によると、キャッチする必要がありそうな例外の種類は以下の通りです:
GuzzleHttpExceptionClientException
を使用します。GuzzleHttpException
を使用します。GuzzleHttpException }BadResponseException
(スーパークラスです)このようなエラーを処理するコードは、現在、次のようなものです:
ガズル 3.x
ドキュメント](http://guzzle3.readthedocs.org/http-client/request.html#http-errors)によると、適切な例外タイプ(4xxエラーの場合は
ClientErrorResponseException
)をキャッチして、そのgetResponse()
メソッドを呼び出してレスポンスオブジェクトを取得し、その上でgetBody()
を呼び出すことができます:getBody
][1]関数に
trueを渡すと、レスポンスボディを文字列として取得することができる。そうでない場合は、
GuzzleHttpEntityBody`クラスのインスタンスとして取得されます。Markが言ったように、BadResponseExceptionはClientExceptionとServerExceptionのスーパークラスにすぎません。しかし、RequestExceptionもまた、BadRequestExceptionのスーパー・クラスです。これは400や500のエラーだけでなく、ネットワークエラーも捕らえることができます。例えば、下のようなページをリクエストしたけれども、ネットワークがうまくいかず、BadResponseExceptionをキャッチしたとします。この場合、アプリケーションはエラーを投げることになります。
この場合、RequestExceptionを想定し、レスポンスを確認する方がよいでしょう。
2019年の時点で、上記の回答とGuzzle docsから例外を処理し、応答本文、ステータスを取得するために詳しく説明しましたコード、メッセージ、その他の貴重な応答アイテム。