Guzzle を使用して API をテストするときに例外をキャッチするのは難しい場合があります。この記事では、この問題に対処し、200 以外の HTTP コードで応答を取得するための解決策を示します。
コード例では、特定の HTTP コードを処理するためにイベント リスナーが使用されていますが、依然として例外がスローされます。これを解決するには、HTTP ステータス コードで例外を処理するオプションがあります。
Guzzle 3 と Guzzle 5.3 の両方で、例外を無効にすると、すべてのステータスを手動で処理できるようになります。コード。 「例外」を設定するだけです =>クライアント オプションで false。
Guzzle 3
$client = new \Guzzle\Http\Client($httpBase, array( 'request.options' => array( 'exceptions' => false, ) ));
Guzzle 5.3
$client = new \GuzzleHttp\Client(['defaults' => [ 'exceptions' => false ]] );
例外が無効になっている場合、 HTTP ステータス コードは応答から直接取得できます。
$response = $request->send(); $statuscode = $response->getStatusCode();
予期されるステータス コードは、次のように処理できます。
if (200 === $statuscode) { // Do something } elseif (304 === $statuscode) { // Nothing to do } elseif (404 === $statuscode) { // Clean up DB or something like this } else { throw new MyException("Invalid response from api..."); }
Guzzle 6
Guzzle 6 では、'http_errors' => を使用します。クライアントオプションで false:
$client = new \GuzzleHttp\Client(['http_errors' => false]);
以上がAPI をテストするときに Guzzle で未処理の例外を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。