Laravel中如何通过Guzzle中间件统一添加请求头
你可以通过Laravel的服务提供者全局配置HTTP客户端的默认请求头,彻底避免在每个控制器里重复调用withToken方法,具体操作如下:
1. 配置全局默认请求头
打开app/Providers/AppServiceProvider.php,在boot方法中添加全局HTTP客户端的默认头配置:
<?php namespace App\Providers; use Illuminate\Support\Facades\Http; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { // } /** * Bootstrap any application services. */ public function boot(): void { // 为所有HTTP请求自动携带Authorization头 Http::defaults([ 'headers' => [ 'Authorization' => 'Bearer 1Asaciry$rsW$', ], ]); } }
如果你不需要
Bearer前缀,直接写'Authorization' => '1Asaciry$rsW$'即可,和你之前用withToken的效果完全一致。
2. 简化控制器代码
现在你可以直接调用Http::post方法,无需手动添加withToken:
class PostController extends Controller { public function getLastRecord() { $lastRec = Post::latest('created_at')->first(); $body = collect([$lastRec])->map(function($record) { return [ 'id' => $record->post_id, 'rec_name' => $record->post_name, 'user' => $record->user_id, ]; })->toArray(); // 直接发送请求,自动携带Authorization头 $response = Http::post('http://post.com', $body); return $response; } }
备选方案:自定义HTTP客户端宏
如果不想全局覆盖所有HTTP请求,也可以定义一个宏,需要时按需调用:
在AppServiceProvider的boot方法中添加:
Http::macro('withAuthToken', function () { return Http::withToken('1Asaciry$rsW$'); });
之后控制器里可以这样使用:
$response = Http::withAuthToken()->post('http://post.com', $body);
内容的提问来源于stack exchange,提问作者silverxak
相关产品推荐
相关产品推荐

