Je cherche à courber une URL et à garder une trace de chaque URL individuelle qu'elle passe. Pour une raison quelconque, je suis incapable d'accomplir cela sans effectuer des appels de courbure récursive qui n'est pas idéal. Peut-être que je manque une option facile. Pensées?
Array
(
[url] => THE LAST URL THAT WAS HIT
[content_type] => text/html; charset=utf-8
[http_code] => 200
[header_size] => 1942
[request_size] => 1047
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 2 <---- I WANT THESE
[total_time] => 0.799589
[namelookup_time] => 0.000741
[connect_time] => 0.104206
[pretransfer_time] => 0.104306
[size_upload] => 0
[size_download] => 49460
[speed_download] => 61856
[speed_upload] => 0
[download_content_length] => 49460
[upload_content_length] => 0
[starttransfer_time] => 0.280781
[redirect_time] => 0.400723
)
3 Réponses :
Vous avez
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');
Quel serait $ redirectCallback code> à titre d'exemple?
Ne fonctionne pas pour moi
Puis-je faire une recommandation ...
preg_match('/(Location:|URI:)(.*?)\n/', $httpheader, $matches);
avec libcurl, vous pouvez utiliser Curlinfo_redirect_url variable getinfo pour savoir L'URL IT aurait EM> redirigé si elle a été activée. Cela permet aux programmes de traverser facilement les redirections elles-mêmes. Cette approche est bien meilleure et plus facile que l'analyse la liaison PHP / CURL ajoutée Prise en charge de cette fonctionnalité dans PHP 5.3.7: P> Emplacement: Code> Les autres ont suggéré ici, comme votre code doit reconstruire des chemins relatifs, etc. curlinfo_redirect_url code> corrige automatiquement pour vous. p> $url = curl_getinfo($ch, CURLINFO_REDIRECT_URL)
Hey, le lien ne fonctionne plus. Cela a-t-il été mis en œuvre et, dans l'affirmative, savez-vous comment l'utiliser de PHP?
Je suis reconnaissant pour cette perspicacité, j'aime beaucoup plus que de boucler manuellement sur les codes de statut et de trouver une URL redirigation.