如何在PHP中获取实际的URL?

时间:2015-07-07 05:09:38

标签: php

我有网址 http://www.wolframalpha.com/entities/zip_codes/AL_36574/9t/ej/3z/

当你去这个网址时,它会去 http://www.wolframalpha.com/input/?i=AL+36574 这里。

现在我想要上一个这个网址。 因此我创建了像这样的代码

<?php
$url="http://www.wolframalpha.com/entities/zip_codes/AL_36574/9t/ej/3z/";
    $headers = get_headers($url, 1);



// will echo http://www.wolframalpha.com/input/?i=AL+36574
echo $headers[0];
?>

但它不起作用Plz帮助我

3 个答案:

答案 0 :(得分:2)

您必须从标头解析Location而不只是输出第一个标头(HTTP响应代码)。

$headers = get_headers($url, 1);
echo $headers['Location'];

注意您的网页如何返回404响应,然后使用元刷新重定向。在这种情况下通过PHP读取标题不会起作用。 PHP通常不会读取页面生成后发生的JavaScript或html重定向,除非您想尝试解析DOM

<meta http-equiv="refresh" content="0;url='/input/?i=AL+36574' " />

答案 1 :(得分:0)

您是否尝试过$ _SERVER ['HTTP_REFERER']?

类似的东西:

if(isset($_SERVER['HTTP_REFERER']))
{
    $a=$_SERVER['HTTP_REFERER'];
    echo "Your previous page URL is ".$a;
}

答案 2 :(得分:0)

Curl是找出重定向的最佳方式。我刚才有这个代码用于我自己的目的,它不是我自己的。你必须自己制定正则表达式。

<?php
$url="http://www.wolframalpha.com/entities/zip_codes/AL_36574/9t/ej/3z/";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE); // We'll parse redirect url from header.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); // We want to just get redirect url but not to follow it.
$response = curl_exec($ch);
preg_match_all('^0;url=\'(.*?)[$\']+^', $response, $matches);
curl_close($ch);
echo !empty($matches[1]) ? "http://www.wolframalpha.com".trim($matches[1][0]) : 'No redirect found';
?>

您可以在此处看到它http://viper-7.com/TPqpJ8