Skip to main content

Illuminate\Http下的Response 和 \Client\Response差异

\Illuminate\Http\Response 和 \Illuminate\Http\Client\Response 有什么区别 还有这俩分别如何 set 和 get content header 和statuscode

在 Laravel 中,\Illuminate\Http\Response\Illuminate\Http\Client\Response 是两个不同的响应类,用于不同的场景。

1. 区别:

  • \Illuminate\Http\Response:

    • 这是 Laravel 的响应对象,主要用于返回给客户端的 HTTP 响应
    • 你可以在控制器中使用它来构建和返回 HTTP 响应。
    • 常用于通过 Response::make() 等方法创建和发送响应。
  • \Illuminate\Http\Client\Response:

    • 这是 Laravel HTTP 客户端的响应对象,用于处理外部 HTTP 请求的响应
    • 它包含来自外部请求的信息(如 HTTP 状态码、响应头和内容)。
    • 常用于使用 Http::get()Http::post() 等方法发起外部请求后的响应结果。

2. setget 的方法

对于 \Illuminate\Http\Response

  • 设置内容: ->setContent($content)

  • 获取内容: ->getContent()

  • 设置状态码: ->setStatusCode($statusCode)

  • 获取状态码: ->getStatusCode()

  • 设置头信息: ->header($name, $value)->withHeaders(['key' => 'value'])

  • 获取头信息: ->headers->get($headerName)->headers->all()

示例:

php
复制代码
use Illuminate\Http\Response;

$response = new Response();
$response->setContent('This is the content'); // 设置内容
$response->setStatusCode(200); // 设置状态码
$response->header('Content-Type', 'text/plain'); // 设置单个头部
$response->withHeaders(['Cache-Control' => 'no-cache']); // 批量设置头部
$content = $response->getContent(); // 获取内容
$statusCode = $response->getStatusCode(); // 获取状态码
$header = $response->headers->get('Content-Type'); // 获取单个头部
$allHeaders = $response->headers->all(); // 获取所有头部

对于 \Illuminate\Http\Client\Response

  • 获取内容: ->body()->json()(如果响应是 JSON 格式)

  • 获取状态码: ->status()

  • 获取头信息: ->header($name)(获取单个头部)或 ->headers()(获取所有头部)

注意:\Illuminate\Http\Client\Response不支持直接设置内容、状态码和头部的,因为它是一个已接收的响应对象,无法修改。

示例:

php
复制代码
use Illuminate\Support\Facades\Http;

$response = Http::get('https://example.com/api'); // 外部请求响应
$content = $response->body(); // 获取响应内容
$jsonContent = $response->json(); // 如果是 JSON 格式,解析为数组
$statusCode = $response->status(); // 获取状态码
$header = $response->header('Content-Type'); // 获取单个头部
$allHeaders = $response->headers(); // 获取所有头部

总结

  • Response 类用于构建并返回给客户端的响应,可以设置内容、状态码和头信息。
  • Client\Response 类用于获取外部请求的响应内容和元信息,不支持直接设置。