20.

PythonのResponseオブジェクトの中身の確認

編集
この記事の要点
  • Laravel の Response オブジェクトの中身を確認する方法
  • $response->getContent(): レスポンスボディの文字列
  • $response->getStatusCode(): HTTP ステータスコード
  • $response->headers->all(): ヘッダ一覧
  • テストでは $response->dump() / $response->dd() で詳細表示

 

Response オブジェクトの基本

Laravel の Controller は通常、HTTP レスポンスとして Response オブジェクトを返します。デバッグやテストでこの中身を確認する方法。

主要なメソッド

// レスポンスオブジェクトの構成要素
$response = response('Hello', 200, ['X-Custom' => 'value']);

// ボディ
echo $response->getContent();
// → "Hello"

// ステータスコード
echo $response->getStatusCode();
// → 200

// ヘッダ全件
print_r($response->headers->all());
// → ["content-type" => ["text/html; charset=utf-8"], "x-custom" => ["value"]]

// 個別ヘッダ
echo $response->headers->get('content-type');
// → "text/html; charset=utf-8"

// 全部見る
var_dump($response);

// JSON レスポンスの場合
echo $response->getData(true);  // 配列として
echo $response->getContent();   // JSON 文字列として

外部 API を呼んだ場合(HttpClient)

use Illuminate\Support\Facades\Http;

$response = Http::get('https://api.example.com/users');

// ステータス
$response->status();             // 200
$response->successful();          // true (2xx)
$response->ok();                  // true (200)
$response->failed();              // false
$response->clientError();         // false (4xx)
$response->serverError();         // false (5xx)

// ボディ
$response->body();               // 文字列
$response->json();               // 配列にデコード
$response->json('name');         // ネストしたキー取得
$response->object();             // stdClass オブジェクト
$response->collect();            // Collection
$response->resource();           // Stream リソース

// ヘッダ
$response->headers();            // 全件
$response->header('Content-Type'); // 個別

// Cookie
$response->cookies();

// 例外を投げる
$response->throw();  // 4xx/5xx ならエラー throw

テストでの確認

// PHPUnit / Pest テスト
public function test_user_list()
{
    $response = $this->get('/users');

    // dump (出力 + 続行)
    $response->dump();           // レスポンス全体
    $response->dumpHeaders();    // ヘッダのみ
    $response->dumpSession();    // セッション

    // dd (出力 + 終了)
    $response->dd();             // 詳細出力して die
    $response->ddHeaders();
    $response->ddSession();

    // アサーション
    $response->assertStatus(200);
    $response->assertOk();
    $response->assertJson(['name' => 'Alice']);
    $response->assertJsonStructure(['data' => ['id', 'name']]);
    $response->assertHeader('X-Custom', 'value');
    $response->assertSeeText('Hello');
    $response->assertRedirect('/login');
}

ログ出力

use Illuminate\Support\Facades\Log;

// ステータス + ボディをログ
Log::info('Response', [
    'status' => $response->status(),
    'body' => $response->body(),
    'headers' => $response->headers(),
]);

// HTTP クライアントの request/response をログするミドルウェア
Http::globalRequestMiddleware(function ($request) {
    Log::info('HTTP Request', ['method' => $request->method(), 'url' => $request->url()]);
    return $request;
});

Http::globalResponseMiddleware(function ($response) {
    Log::info('HTTP Response', ['status' => $response->status(), 'body' => substr($response->body(), 0, 200)]);
    return $response;
});

Tinker でインタラクティブ確認

$ php artisan tinker

>>> $response = Http::get('https://api.example.com/data')
=> Illuminate\Http\Client\Response { ... }

>>> $response->status()
=> 200

>>> $response->json()
=> [
     "users" => [...],
   ]

>>> $response->headers()
=> [
     "content-type" => ["application/json"],
     ...
   ]

# Telescope (laravel/telescope) で UI 経由でも確認可

カスタムレスポンスの構築

// 標準的なレスポンス構築
return response('Hello', 200);
return response('Not Found', 404);

// JSON
return response()->json(['name' => 'Alice'], 200);

// ヘッダ付き
return response('Hello', 200, ['X-Custom' => 'value']);

// チェーンで構築
return response('Hello')
    ->header('X-Foo', 'bar')
    ->cookie('session', 'abc123', 60)
    ->setStatusCode(201);

// ストリーミング
return response()->stream(function () {
    echo 'streaming data...';
}, 200, ['Content-Type' => 'text/plain']);

// ダウンロード
return response()->download($pathToFile);

// JSON ファイル
return response()->json(...)->header('Cache-Control', 'no-cache');

// View
return response()->view('users.show', ['user' => $user]);

レスポンスマクロ(カスタム)

// AppServiceProvider::boot()
Response::macro('apiSuccess', function ($data, $message = 'OK') {
    return response()->json([
        'success' => true,
        'message' => $message,
        'data' => $data,
    ]);
});

// 利用
return response()->apiSuccess(['name' => 'Alice']);

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 基本的なルール
  2. 変数
  3. 演算子
  4. 標準ライブラリ
  5. 外部ライブラリ
  6. 制御構文
  7. リスト(配列)
  8. タプル
  9. セット
  10. 辞書(dict)
  11. クラスとメソッド
  12. 継承の概念と必要性
  13. 継承の構文
  14. コンストラクタ
  15. cookieの値の設定と取得
  16. 例外処理
  17. 例外を文字列で出力する方法
  18. httpリクエスト(curl)をする方法
  19. Responseオブジェクトの中身の確認
  20. 変数が空かどうか判定する方法
  21. タイムゾーンの設定と現在日時の取得と文字列化
  22. シングルクォーテーションとダブルクォーテーションの違い