如何通过PHP Curl仅提取并打印响应头中的Location字段?
修改PHP脚本仅输出HTTP响应的Location字段
这里提供两种可靠的修改方案,你可以根据需求选择:
方案一:使用cURL头部回调函数(高效推荐)
这种方法通过cURL的CURLOPT_HEADERFUNCTION回调逐行处理响应头部,直接捕获Location字段,无需处理完整的头部内容:
<?php // 设置目标URL $url = "http://example.com/ch1"; // 初始化cURL会话 $ch = curl_init($url); // 设置自定义请求头 $headers = array(); $headers[] = 'R-Auth: e3MVCXtgCXtnD3ITN3NhcyIzfXRhN3Jncntgf3tlc3s='; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 仅请求响应头部,不获取响应体 curl_setopt($ch, CURLOPT_NOBODY, true); // 禁止自动跟随重定向,确保能捕获原始Location头 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // 初始化变量存储Location值 $location = ''; // 设置头部处理回调函数 curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($ch, $header) use (&$location) { $trimmedHeader = trim($header); // 匹配Location字段行 if (strpos($trimmedHeader, 'Location:') === 0) { // 提取Location的值 $location = trim(substr($trimmedHeader, strlen('Location:'))); } // 必须返回当前头部行的长度,否则cURL会报错 return strlen($header); }); // 执行cURL会话 curl_exec($ch); // 关闭cURL会话 curl_close($ch); // 输出捕获到的Location字段 echo $location; ?>
方案二:捕获完整头部后解析(直观易读)
这种方法先获取完整的响应头部,再通过字符串分割和遍历提取Location字段:
<?php // 设置目标URL $url = "http://example.com/ch1"; // 初始化cURL会话 $ch = curl_init($url); // 设置自定义请求头 $headers = array(); $headers[] = 'R-Auth: e3MVCXtgCXtnD3ITN3NhcyIzfXRhN3Jncntgf3tlc3s='; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 仅获取响应头部,不输出内容 curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // 将响应内容返回给变量,而非直接输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取完整的响应头部字符串 $responseHeader = curl_exec($ch); // 关闭cURL会话 curl_close($ch); // 解析头部提取Location字段 $location = ''; // 按换行符分割头部内容 $headerLines = explode("\n", $responseHeader); foreach ($headerLines as $line) { $trimmedLine = trim($line); // 匹配Location字段行 if (strpos($trimmedLine, 'Location:') === 0) { $location = trim(substr($trimmedLine, strlen('Location:'))); break; // 找到后立即退出循环,提升效率 } } // 输出Location字段 echo $location; ?>
关键修改说明
CURLOPT_NOBODY: 设置为true后,cURL只会请求HTTP响应头部,不获取响应体,减少数据传输量。CURLOPT_FOLLOWLOCATION: 设置为false,避免cURL自动跟随重定向,确保能获取到原始的Location跳转地址。CURLOPT_RETURNTRANSFER: 设置为true时,响应内容会返回给变量,而非直接输出到页面。
内容的提问来源于stack exchange,提问作者Vtpii com
相关产品推荐
相关产品推荐

