You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何通过Guzzle中间件统一添加请求头

解决Laravel HTTP客户端自动添加Authorization头的问题

你可以通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:39:34