我从 rss 链接中挖掘数据并获得一堆网址,例如:
http://feedproxy.google.com/~r/electricpig/~3/qoF8XbocUbE/
....如果我访问我的网络浏览器中的链接,我会被重定向到类似的内容:
http://www.electricpig.co.uk/stuff。
php中有没有办法编写一个函数,当给定一个将用户重定向到url“b”的url“a”时,返回url“b”?
我从 rss 链接中挖掘数据并获得一堆网址,例如:
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
将上述行$res = curl_exec($ch);
放在函数之前以getRedirect
实现更快的执行。
public function getRedirect($url) {
$headers = get_headers($url, 1);
if (array_key_exists("Location", $headers)) {
$url = getRedirect($headers["Location"]);
}
return $url;
}