检索重定向url的内容|卷曲与背景

时间:2012-05-24 22:07:19

标签: php javascript

我正在使用file_get_contents

file_get_contents( $url1 ).

然而,实际网址的内容来自$ url2。

以下是具体案例:

$url1 = gmail.com

$url2 = mail.google.com

我需要一种在PHP或JavaScript中以程序方式获取$ url2的方法。

3 个答案:

答案 0 :(得分:1)

如果你想拉动当前的url,在JS中你可以使用window.location.hostname

答案 1 :(得分:1)

我相信你可以通过以下方式创建一个上下文:

$context = stream_context_create(array('http' =>
    array(
        'follow_location'  => false
    )));
$stream = fopen($url, 'r', false, $context);
$meta = stream_get_meta_data($stream);

$ meta应该包括(除其他外)状态代码和用于保存重定向URL的Location头。如果$ meta表示200,您可以使用以下内容获取数据:

$meta = stream_get_contents($stream)

缺点是当您获得301/302时,您必须使用Location标头中的url再次设置请求。泡沫,冲洗,重复。

答案 2 :(得分:1)

我不明白为什么你会想要PHP JavaScript。我的意思是......在解决问题时,他们有点不同。

假设您需要服务器端PHP解决方案,那么有一个全面的解决方案here。要翻译的代码太多,但是:

function follow_redirect($url){
  $redirect_url = null;

  //they've also coded up an fsockopen alternative if you don't have curl installed
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  curl_close($ch);

  //extract the new url from the header
  $pos = strpos($response, "Location: ");
  if($pos === false){
    return false;//no new url means it's the "final" redirect
  } else {
    $pos += strlen($header);
    $redirect_url = substr($response, $pos, strpos($response, "\r\n", $pos)-$pos);
    return $redirect_url;
  }
}

//output all the urls until the final redirect
//you could do whatever you want with these
while(($newurl = follow_redirect($url)) !== false){
  echo $url, '<br/>';
  $url = $newurl;
}