📜  php 获取最终重定向 url - PHP (1)

📅  最后修改于: 2023-12-03 15:33:39.240000             🧑  作者: Mango

PHP 获取最终重定向 URL

在 Web 开发过程中,经常需要了解某个 URL 最终的重定向地址,以便进行相关处理。本文将介绍如何使用 PHP 获取最终重定向 URL。

原理

在 HTTP 协议中,服务器响应(Response)中可能会包含重定向指示(Redirect)的状态码。例如,当访问某个网页时,服务器返回的状态码为 301 或 302 时,浏览器会自动跳转到新的 URL。这种状态码被称为重定向状态码,可以通过 PHP 中的 HTTP 状态码常量进行判断:

if ($http_code === 301 || $http_code === 302) {
    // 处理重定向
}

获取重定向 URL 的方法是通过 cURL 库进行请求,并在请求的过程中记录所有的重定向 URL,直到没有更多的重定向为止。cURL 库提供了 CURLOPT_FOLLOWLOCATION 选项来自动跟踪重定向,CURLOPT_MAXREDIRS 选项可以控制最大的重定向次数。使用 cURL 库进行请求的代码示例:

$url = 'https://example.com/';
$options = array(
    CURLOPT_RETURNTRANSFER => true,     // 返回响应内容
    CURLOPT_FOLLOWLOCATION => true,     // 自动跟踪重定向
    CURLOPT_MAXREDIRS      => 10,       // 最大重定向次数
    CURLOPT_HEADER         => true,     // 返回响应头
    CURLOPT_NOBODY         => true,     // 只返回响应头,不返回响应体
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

通过以上代码可以获取到最终重定向 URL。如果需要获取中间的重定向 URL,可以在 CURLOPT_HEADER 选项启用的情况下,解析响应头并提取 Location 字段。

总结

本文介绍了如何使用 PHP 获取最终重定向 URL,包括通过 cURL 库进行请求,并自动跟踪重定向。需要注意的是,部分重定向 URL 是动态生成的,因此可能无法通过以上方法获取到。