我需要一个函数来测试URL是否通过任何方式重定向。
到目前为止,我已经使用cURL来捕获标头重定向,但显然还有更多的方法可以实现重定向。
例如。
<meta http-equiv="refresh" content="0;url=/somewhere/on/this/server" />
或JS脚本
window.location = 'http://melbourne.ag';
等等。
我想知道是否有人能找到一个涵盖所有问题的解决方案。我会继续我的工作,并将结果发布在这里。
此外,一种快速解析的方法
<meta http-equiv="refresh"...
有人用PHP吗?
我以为这会包含在PHP的原生get_meta_tags()中。。。但我想错了:/
它可以用于标记语言(任何简单的标记解析器都可以),但通常不能用于JavaScript等编程语言。
Web文档中程序的重定向相当于停止该程序。您要求的程序能够判断另一个任意程序是否会停止。这在计算机科学中被称为停顿问题,第一个不可判定的问题。
也就是说,对于资源的子集,您只能正确地告诉是否会发生重定向。
写到一半时,我将添加JS检查。。。
function checkRedirect($url){
// returns the redirected URL or the original
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$out = curl_exec($ch);
$out = str_replace("'r", "", $out);
$headers_end = strpos($out, "'n'n");
if( $headers_end !== false ) {
$out = substr($out, 0, $headers_end);
}
$headers = explode("'n", $out);
foreach($headers as $header) {
if(strtolower(substr($header, 0, 10)) == "location: " ) {
$target = substr($header, 10);
return $target;
}
}
return $url;
}