Как отследить полный путь перенаправления URL-адресов в PHP, включая мета-перенаправления и javascript перенаправления - PullRequest
1 голос
/ 07 мая 2020

Здравствуйте, хорошие разработчики,

Это не повторяющиеся вопросы, так как я изучал каждый результат Stack Overflow, прежде чем помещать его сюда.

Я хочу отследить маршрут перенаправления URL-адреса, значит даже если они используют перенаправления 301, 302 .., мета-ссылку sh или javascript местоположение замените et c. Я хочу знать все промежуточные URL-адреса между исходным URL-адресом и эффективным URL-адресом.

Так, например, мой URL-адрес - example.com -> 301 - example2.com -> 302 -> example3.com -> meta refre sh -> example4.com -> 307 example5.com -> javascript redirect - example6.com ....

Я хочу, чтобы все перенаправления URL были записаны. точно так же, как https://wheregoes.com/retracer.php

Я смог собрать некоторый код и преодолеть перенаправление заголовка и мета-ссылку sh перенаправление, используя код ниже

function followCurl($url, $httpcode='301', $maxRedir = 1, $urlTrace){
    $rawUrl = $url;
    while( preg_match('/301|302/i', $httpcode) and  $maxRedir <= 5 ){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        $resp = curl_exec($ch);
        $cginfo =  curl_getinfo($ch);
        $httpcode =  $cginfo['http_code'];
        preg_match_all('/^Location:(.*)$/mi', $resp, $redir);
        $url = !empty($redir[1]) ? trim($redir[1][0]) : "";

        if($httpcode){
            if(empty($url)){
                $url = $rawUrl;
            }
            $urlTrace[] = [
                'code' => $httpcode,
                'url' => $url,
                'data' => $resp,
            ];
        }     

        curl_close($ch);
        $maxRedir++;
    }

    if( $redirect_count = count($urlTrace) ){
        --$redirect_count;
        $finalLink = end($urlTrace);
        $finalurl = $finalLink['url'];

        if( !checkIfContainsDomainName($finalurl) && isset($urlTrace[$redirect_count]) ){
            $secondLast = $urlTrace[$redirect_count-1];
            $secondUrl = $secondLast['url'];
            $lastDomain = parse_url($secondUrl);
            if($lastDomain){
                $finalurl = $lastDomain['scheme'].'://'.$lastDomain['host'].$finalurl;
                $urlTrace[$redirect_count]['url'] = $finalurl;
            }
        }

        if(!isset($urlTrace[$redirect_count]['data'])){
            return $urlTrace;
        }

        $finalData = $urlTrace[$redirect_count]['data'];

        if(strpos( $finalData, "http-equiv='refresh'" )){
            $metaUrl = pluckurl($finalData);
            if($metaUrl){
                $urlTrace[] = [
                    'code' => 'meta_refresh',
                    'url' => $metaUrl,
                ];
                return followCurl($metaUrl, '301', 1, $urlTrace);
            }
        }
    }
    return $urlTrace;
}

Но теперь Я не знаю, как мне добавить сюда javascript лог обнаружения перенаправления c.

...