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
相关产品推荐
相关产品推荐

