PHP中的网址跟踪

时间:2019-05-18 21:52:54

标签: php curl

我正在使用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。例如如果网址未重定向,则应返回200OK。但是我的代码开始出现错误。请帮助我解决此问题,例如未定义的偏移“位置”。

1 个答案:

答案 0 :(得分:0)

如果您想一遍又一遍地做一些事情,直到获得理想的结果,则可能始终需要recursion。看来您的代码只执行一次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,这使一切都变得更加简单。