如何使用CURLINFO或cURL获取Referrer值
从cURL请求中获取Referrer值的正确方法
你的代码无法正常运行的核心问题是没有执行cURL请求,curl_getinfo()需要在curl_exec()执行请求之后,才能获取到有效的请求/响应相关信息。另外,若要获取请求中发送的Referer,需先通过CURLOPT_REFERER设置对应的请求头。
情况1:获取请求中发送的Referer值
如果你想确认自己的cURL请求发送了什么Referer,可使用以下代码:
$curldomain = "https://www.example.com/"; $referrer = "https://www.your-referrer-domain.com/"; // 自定义要发送的Referer $ch = curl_init($curldomain); // 设置cURL基础选项 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); // 设置请求头中的Referer curl_setopt($ch, CURLOPT_REFERER, $referrer); // 执行cURL请求 $response = curl_exec($ch); // 处理请求结果 if ($response === false) { echo 'cURL错误: ' . curl_error($ch); } else { // 获取请求中实际发送的Referer $referrerValue = curl_getinfo($ch, CURLINFO_REFERER); echo '请求发送的Referer: ' . $referrerValue; } // 关闭cURL资源 curl_close($ch);
情况2:追踪跳转过程中的Referer变化
如果目标URL发生跳转,想要查看跳转过程中的Referer细节,可开启CURLOPT_VERBOSE模式查看详细请求日志:
$curldomain = "https://www.example.com/"; $ch = curl_init($curldomain); // 设置cURL选项 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); // 开启verbose模式,记录详细请求过程 curl_setopt($ch, CURLOPT_VERBOSE, true); // 将日志输出导向临时文件,避免直接显示在页面 $verboseHandle = fopen('php://temp', 'w+'); curl_setopt($ch, CURLOPT_STDERR, $verboseHandle); // 执行请求 $response = curl_exec($ch); // 读取并输出verbose日志 rewind($verboseHandle); $verboseLog = stream_get_contents($verboseHandle); fclose($verboseHandle); echo '<pre>' . htmlspecialchars($verboseLog) . '</pre>'; // 关闭cURL资源 curl_close($ch);
关键要点
- 必须在
curl_exec()执行请求之后调用curl_getinfo(),否则无法获取有效数据。 CURLINFO_REFERER返回的是cURL发送的Referer值,而非服务器返回的内容。若要提取响应头中的Referer相关信息,需要自行解析通过CURLOPT_HEADER获取的响应头内容。
内容的提问来源于stack exchange,提问作者JK Sandhiya
相关产品推荐
相关产品推荐

