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

PHP技术问题:如何获取并展示GET请求的请求头?

在PHP中获取并展示GET请求的请求头信息

嘿,这个需求其实挺常见的,PHP本身就提供了现成的工具来搞定,我分两种常见场景给你说明白:

场景1:获取当前PHP脚本收到的GET请求头

如果是想查看客户端(比如浏览器)发给你的PHP脚本的GET请求头,可以用PHP的超全局变量$_SERVER来实现。这个变量里包含了所有HTTP请求相关的信息,其中请求头字段通常以HTTP_开头。

下面是一段实用的代码,会自动筛选并格式化请求头:

<?php
// 先判断是不是GET请求
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    echo "<h3>当前GET请求的请求头信息:</h3>";
    echo "<ul>";
    
    foreach ($_SERVER as $key => $value) {
        // 处理以HTTP_开头的标准请求头
        if (str_starts_with($key, 'HTTP_')) {
            // 把键名转换成标准的HTTP头格式(比如HTTP_USER_AGENT → User-Agent)
            $headerName = str_replace('_', ' ', substr($key, 5));
            $headerName = ucwords(strtolower($headerName));
            $headerName = str_replace(' ', '-', $headerName);
            echo "<li><strong>$headerName:</strong> $value</li>";
        }
        // 处理几个特殊的非HTTP_开头的头(比如Host、Content-Type)
        elseif (in_array($key, ['CONTENT_TYPE', 'CONTENT_LENGTH', 'HOST'])) {
            $headerName = str_replace('_', '-', ucwords(strtolower($key)));
            echo "<li><strong>$headerName:</strong> $value</li>";
        }
    }
    
    echo "</ul>";
} else {
    echo "这不是一个GET请求哦!请用GET方式访问这个页面。";
}
?>

注意:str_starts_with是PHP 8.0及以上版本的函数,如果你的PHP版本更低,可以用substr($key, 0, 5) === 'HTTP_'来替代。

场景2:用PHP发送GET请求后,获取目标服务器返回的响应头

如果是想自己用PHP发一个GET请求到其他服务器,然后查看对方返回的响应头,推荐用cURL(功能更灵活),也可以用简单的file_get_contents。

方法1:使用cURL(推荐)

cURL支持自定义请求头、超时设置、HTTPS处理等,适合复杂场景:

<?php
$targetUrl = "https://example.com"; // 替换成你要请求的目标URL

// 初始化cURL会话
$ch = curl_init($targetUrl);

// 设置选项:返回响应内容、包含响应头、使用GET方法
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);

// 执行请求
$response = curl_exec($ch);

if ($response === false) {
    echo "请求失败:" . curl_error($ch);
} else {
    // 分离响应头和响应体
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $responseHeaders = substr($response, 0, $headerSize);
    $responseBody = substr($response, $headerSize);

    // 展示响应头
    echo "<h3>发送GET请求后收到的响应头:</h3>";
    $headerLines = explode("\r\n", $responseHeaders);
    echo "<ul>";
    foreach ($headerLines as $line) {
        if (!empty($line)) {
            echo "<li>$line</li>";
        }
    }
    echo "</ul>";

    // 可选:展示响应体内容
    // echo "<h3>响应体内容:</h3>";
    // echo $responseBody;
}

// 关闭cURL会话
curl_close($ch);
?>

方法2:使用file_get_contents(简单场景)

如果需求很简单,用file_get_contents配合流上下文也能实现:

<?php
$targetUrl = "https://example.com";

// 创建流上下文,可自定义请求头
$context = stream_context_create([
    'http' => [
        'method' => 'GET',
        'header' => "User-Agent: MyPHP-Custom-Request/1.0\r\n" // 自定义请求头示例
    ]
]);

// 发送请求
$responseBody = file_get_contents($targetUrl, false, $context);

// 获取响应头($http_response_header是自动生成的全局变量)
$responseHeaders = $http_response_header;

// 展示响应头
echo "<h3>发送GET请求后收到的响应头:</h3>";
echo "<ul>";
foreach ($responseHeaders as $header) {
    echo "<li>$header</li>";
}
echo "</ul>";
?>

内容的提问来源于stack exchange,提问作者 phong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:33:01