захватить перенаправленный URL с помощью cURL - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь найти, куда меня перенаправят.Поэтому я попытался функционировать для этого, но ни один из них не работает должным образом.

ссылки здесь.при попытке войти вы будете перенаправлены:

https://lions -mansion.jp / MA141070 /

, поэтому я попытался использовать cURL,

function redirect1($url) { 
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        $data = curl_exec($ch);
        $data = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL );
        curl_close($ch);

        return $data;
    }

а также вот это:

function redirect($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        if (preg_match('~Location: (.*)~i', $result, $match)) {
           $location = trim($match[1]);
        }

        return $result;
    }

Но я не смог найти перенаправленный URL.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

эта страница не использует схему перенаправления, которую понимает libcurl (она использует html <meta http-equiv="REFRESH" -redirect , не поддерживаемую libcurl), поэтому libcurl не может ни сказать вам, куда она перенаправляется, ниможет ли libcurl автоматически следовать за перенаправлением (потому что libcurl его не понимает)

вам нужно самостоятельно проанализировать URL перенаправления из HTML, например,

function redirect1($url) { 
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        $data = curl_exec($ch);
        $domd=@DOMDocument::loadHTML($data);
        $xp=new DOMXPath($domd);
        // <META http-equiv="REFRESH" content="0;URL=http://sumai.tokyu-land.co.jp/branz/roppongi4/?iad=daikyo" />

        $location=$xp->query("//meta[@http-equiv='REFRESH']")->item(0)->getAttribute("content");
        // 0;URL=http://sumai.tokyu-land.co.jp/branz/roppongi4/?iad=daikyo   
        $location=substr($location,stripos($location,'URL=')+4);
        curl_close($ch);
        return $location;
    }
    var_dump(redirect1('https://lions-mansion.jp/MA141070/'));

вывод:

C:\projects\misc>php re.php
string(57) "http://sumai.tokyu-land.co.jp/branz/roppongi4/?iad=daikyo"
0 голосов
/ 23 февраля 2019

Если оставить вас от CURLOPT_RETURNTRANSFER до true, после выполнения команды CURL вы можете использовать этот вызов функции для получения перенаправления действующего URL:

$finalUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...