You have
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
This means that cURL will follow the redirect and will return you only the last page with no location header.
Follow location manually:
function getWebPage($url, $redirectcallback = null){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061024 BonEcho/2.0"); $html = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) { list($httpheader) = explode("\r\n\r\n", $html, 2); $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $httpheader, $matches); $nurl = trim(array_pop($matches)); $url_parsed = parse_url($nurl); if (isset($url_parsed)) { if($redirectcallback){ // callback $redirectcallback($nurl, $url); } $html = getWebPage($nurl, $redirectcallback); } } return $html; } function trackAllLocations($newUrl, $currentUrl){ echo $currentUrl.' ---> '.$newUrl."\r\n"; } getWebPage('some url with redirects', 'trackAllLocations');
mauris
source share