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. set 和 get 的方法
对于 \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类用于获取外部请求的响应内容和元信息,不支持直接设置。
No Comments