获取指定url重定向到的url


Get the url, a given url redirects to

我从rss链接中挖掘数据,得到一堆url,比如:

http://feedproxy.google.com/~r/electricpig/~3/qoF8XbocUbE/

如果我访问网络浏览器中的链接,我会被重定向到类似于的内容

http://www.electricpig.co.uk/stuff.

php中有没有一种方法可以编写一个函数,当给定一个将用户重定向到url"b"的url"a"时,它会返回url"b)?

开始:

function getRedirect($oldUrl) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $oldUrl);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $res = curl_exec($ch);
    $newUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);
    return $newUrl;
}

该函数需要cURL,并使用CURLINO_EFFECTIVE_URL。你可以在这里的phpdoc上查找

编辑:

如果你确定oldUrl没有通过javascript重定向到newUrl,那么你也可以避免使用获取newUrl的正文

curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body 

在函数getRedirect中的$res = curl_exec($ch);之前放上上述行,以实现更快的执行。

public function getRedirect($url) {
    $headers = get_headers($url, 1);
    if (array_key_exists("Location", $headers)) {
        $url = getRedirect($headers["Location"]);
    }
    return $url;
}