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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:49:57