如果发生重定向,如何在file_get_contents后获取真正的URL?

2022-08-30 11:38:54

我用来从网站获取内容,令人惊讶的是,即使我作为参数传递的URL重定向到另一个URL,它也可以正常工作。file_get_contents()

问题是我需要知道新的URL,有没有办法做到这一点?


答案 1

如果您需要使用而不是 curl,请不要自动关注重定向:file_get_contents()

$context = stream_context_create(
    array(
        'http' => array(
            'follow_location' => false
        )
    )
);

$html = file_get_contents('http://www.example.com/', false, $context);

var_dump($http_response_header);

答案的灵感来自:如何忽略PHP中带有file_get_contents的移动标头?


答案 2

您可以使用 cURL 而不是 发出请求。file_get_contents()

像这样的东西应该有效...

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$a = curl_exec($ch);
if(preg_match('#Location: (.*)#', $a, $r))
 $l = trim($r[1]);


推荐