我想使用PHP获取以下地址重定向到的页面的URL:
该脚本应返回上面重定向的URL的以下URL:
答案 0 :(得分:1)
执行此操作的一种方式(多种方式)是使用fopen
打开网址,然后使用stream_get_meta_data
来抓取标头。这是我从一段时间后写的东西中抓取的一个快速片段:
$fh = fopen($uri, 'r');
$details = stream_get_meta_data($fh);
foreach ($details['wrapper_data'] as $line) {
if (preg_match('/^Location: (.*?)$/i', $line, $m)) {
// There was a redirect to $m[1]
}
}
请注意,您可以有多个重定向,它们既可以是相对的,也可以是绝对的。
答案 1 :(得分:1)
您可以使用cURL执行此操作。
<?php
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
//$header['errno'] = $err;
// $header['errmsg'] = $errmsg;
//$header['content'] = $content;
print($header[0]);
return $header;
}
$thisurl = "http://www.example.com/redirectfrom";
$myUrlInfo = get_web_page( $thisurl );
echo $myUrlInfo["url"];
?>
答案 2 :(得分:0)
我发现this resource是最完整,最深思熟虑的方法和解释。代码不是最短的snippit,但你最终能用这样的几行来跟踪多个重定向:
$result = get_all_redirects('http://bit.ly/abc123');
print_r($result);
答案 3 :(得分:0)
我发现您可以简单地使用以下代码在简单的重定向上获取重定向URL。这不适用于递归重定向。
$headers = get_headers("https://graph.facebook.com/me/picture?access_token=__token__", 1);
$image_url = $headers['Location'];
**上面的示例是从Graph API调用中捕获Facebook配置文件图像URL,该API调用与HTTP 302标头一起发布。