使用PHP捕获重定向URL

时间:2010-06-08 14:42:56

标签: php redirect

我想使用PHP获取以下地址重定向到的页面的URL:

  

http://peacecorpsjournals.com/journal/6731

该脚本应返回上面重定向的URL的以下URL:

  

http://ghanakimsuri.blogspot.com/

4 个答案:

答案 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"];

?>

此处的代码:http://forums.devshed.com/php-development-5/curl-get-final-url-after-inital-url-redirects-544144.html

答案 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标头一起发布。