如何用PHP发送HEAD与GET请求?含重定向资源Header获取需求
在PHP中获取重定向后的资源响应头(不下载内容)
要实现不下载资源主体、自动跟进重定向获取最终资源响应头的需求,PHP里可以用原生curl扩展或者Guzzle库来做,两种方案都能达到目的:
一、原生PHP curl实现
利用PHP的curl扩展,通过配置参数实现只请求响应头、自动跟进重定向,完全不需要下载媒体文件主体:
function getFinalHeaders(string $url, string $method = 'HEAD'): array { $ch = curl_init($url); // 核心配置:仅获取响应头,自动处理重定向 curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // 限制最大重定向次数,避免死循环 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); // 指定请求方法(HEAD/GET) // 捕获响应头信息 $headers = []; curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($curl, $header) use (&$headers) { $len = strlen($header); $header = trim($header); if (!empty($header)) { $headers[] = $header; } return $len; }); curl_exec($ch); // 获取最终请求的关键信息 $finalInfo = curl_getinfo($ch); curl_close($ch); return [ 'final_url' => $finalInfo['url'], 'http_code' => $finalInfo['http_code'], 'headers' => $headers ]; } // 使用示例 $result = getFinalHeaders('http://www.google.com', 'GET'); print_r($result);
关键参数说明:
CURLOPT_NOBODY => true:告诉curl只请求响应头,跳过主体内容下载CURLOPT_FOLLOWLOCATION => true:自动跟进所有重定向CURLOPT_MAXREDIRS:设置最大重定向次数,防止无限循环
二、Guzzle库实现
Guzzle是PHP生态中常用的HTTP客户端,封装了复杂的curl逻辑,用起来更简洁:
首先通过Composer安装Guzzle:
composer require guzzlehttp/guzzle
然后实现功能:
require 'vendor/autoload.php'; use GuzzleHttp\Client; use GuzzleHttp\RequestOptions; function getFinalHeadersWithGuzzle(string $url, string $method = 'HEAD'): array { $client = new Client([ 'allow_redirects' => [ 'max' => 10, // 最大重定向次数 'strict' => false, // 允许跨协议重定向(如HTTP转HTTPS) ], ]); try { $response = $client->request($method, $url, [ RequestOptions::HEADERS_ONLY => true, // 仅获取响应头,不下载主体 ]); return [ 'final_url' => $response->getUri()->__toString(), 'http_code' => $response->getStatusCode(), 'headers' => $response->getHeaders() ]; } catch (\GuzzleHttp\Exception\GuzzleException $e) { // 处理请求异常(如重定向超限、连接失败等) return ['error' => $e->getMessage()]; } } // 使用示例 $result = getFinalHeadersWithGuzzle('http://www.google.com', 'GET'); print_r($result);
优势说明:
- Guzzle自动处理重定向逻辑,无需手动配置curl参数
- 响应头以结构化数组返回,方便后续处理
- 内置异常处理,能轻松捕获请求中的各种错误
内容的提问来源于stack exchange,提问作者Bernard Wiesner
相关产品推荐
相关产品推荐

