Laravel 5默认使用Guzzle HTTP Client(v6.x),原生cURL需手动配置CURLOPT_HTTPHEADER数组,Guzzle则通过'headers'选项设置;服务端读取请求头应统一用request()->header()而非$_SERVER。

Laravel 5 本身不内置 cURL 封装类,它默认使用 Guzzle HTTP Client(尤其是 Laravel 5.3+),但如果你在项目中直接使用原生 PHP 的 curl 扩展(比如手动初始化 curl_init()),设置请求头的方式和标准 PHP 完全一致,与 Laravel 版本无关——关键在于你用的是原生 cURL 还是框架封装的客户端。
用原生 cURL 设置请求头(兼容 Laravel 5)
这是最底层、最可控的方式,适用于需要精细控制或绕过 Guzzle 的场景:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- 调用
curl_setopt($ch, CURLOPT_HTTPHEADER, [...]),传入一个字符串数组,每项格式为"Key: Value" - 必须确保
CURLOPT_RETURNTRANSFER设为true,否则响应内容不会返回给 PHP 变量 - 常见头示例:
"Content-Type: application/json"、"Authorization: Bearer abc123"、"Accept: application/json" - 注意:Laravel 5 环境需确认
php-curl扩展已启用(可通过php -m | grep curl验证)
用 Guzzle(Laravel 5 推荐方式)设置请求头
Laravel 5 默认集成 Guzzle(通常为 v6.x),更安全、易维护,也支持中间件和异常处理:
- 在控制器或服务中使用
Http::withHeaders([...])(Laravel 7+ 语法,不适用于 Laravel 5) - Laravel 5 应直接使用 Guzzle 实例:
// 创建客户端$client = new \GuzzleHttp\Client();
// 发起带头请求$response = $client->request('POST', 'https://api.example.com/data', ['headers' => ['Content-Type' => 'application/json','Authorization' => 'Bearer abc123',],'json' => ['name' => 'John']]); - 若未安装 Guzzle,运行
composer require guzzlehttp/guzzle:^6.5(Laravel 5 兼容最高到 Guzzle 6)
获取请求头(服务端接收时)
如果你是指“如何在 Laravel 5 中读取客户端发来的请求头”,那和 cURL 无关,而是服务端解析逻辑:
- 统一用
request()->header('X-Api-Key')—— 自动处理大小写、代理头标准化(如X-Forwarded-For) - 避免直接读
$_SERVER['HTTP_X_API_KEY'],因 Nginx/Apache 可能重写或过滤下划线字段(需配置underscores_in_headers on) - 若 header 值含多个(如多个
Cookie),加第三个参数true获取全部:request()->header('Cookie', null, true)
常见问题提醒
- 设置响应头(即你返回给前端的头)不能用
header()函数,应在控制器中返回response()->withHeaders([...])或通过中间件统一注入 - 队列任务中无法访问请求头,因为无 HTTP 上下文;需在分发任务前把必要 header 值提取出来作为参数传入
- 调试时可用
curl_getinfo($ch, CURLINFO_HEADER_OUT)查看实际发出的请求头

















