捕获所有常见类型的重定向、头、元、JavaScript等


Catching all common types of redirection, header, meta, JavaScript, etc

我需要一个函数来测试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;
 }