URL трассировки в Php - PullRequest
0 голосов
/ 19 мая 2019

Я использую get_headers ($ url, 1) для получения статуса перенаправления. Я получаю некоторые результаты, но не для каждого $ URL. Если url1 перенаправляет на url2-> ulr3-> url4 и так далее. Я хочу отследить их всех.

Пока мой код:

$url = "https://somedomain.com";
$headerarray = get_headers($url,5);

 for($i=0;$i<=10;$i++)
 {

    if(isset($headerarr1[$i]))
    {
        if(sizeof($headerarr1[$i])>0)
        {
            echo $headerarr1[$i]."->";
            if(isset($headerarr1['Location'][$i]))
            {
                if(sizeof($headerarr1['Location'][$i])>0)
                {
                    echo $headerarr1['Location'][$i]."<br>";
                }
            }
        }   
    }
}

Я могу отследить, если URL переходит на 301-> 302-200ok, но этот код не отслеживает все URL. Например, Если URL не перенаправляет, он должен вернуть 200OK. но мой код начинает давать ошибку. Пожалуйста, помогите мне исправить это как неопределенное Смещение 'Местоположение'.

1 Ответ

0 голосов
/ 19 мая 2019

Если вы хотите получать что-то снова и снова, пока не получите желаемый результат, вам, вероятно, всегда понадобится рекурсия .Похоже, ваш код выполняется только get_headers один раз, поэтому вы будете знать только первый результат заголовка и ничего больше.

Что-то подобное должно сработать:

$url = 'https://google.com';
$httpCode = '';
while ($httpCode !== 'HTTP/1.0 200 OK') {
    $headers = get_headers($url, 5);

    $httpCode = $headers[0]; // May not be the this key, but you will figure that out yourself.
    if (array_key_exists('Location', $headers) && !empty($headers['Location']) {
        $url = $headers['Location'];
        echo sprintf(' -> %s', $url);
    } else {
        break; // The location header is not set, so we have no idea where to follow to.
    }
}

Это решениеможет быть не идеальным и может потребовать немного проб и ошибок.Я могу предложить вам использовать некоторые библиотеки, поскольку почти всем когда-либо приходилось выполнять какие-то запросы в PHP, и есть очень хорошие библиотеки, такие как Guzzle , которые делают все намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...