У меня есть функция:
public function getHeaders($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
$x = curl_exec($ch);
curl_close($ch);
return (array) HTTP::parse_header_string($x) ;
}
Когда $url=http://www.google.com', я have header location:
http://www.google.de/?gfe_rd=cr&ei=SOMEHASHGOESHERE ' загрузите его снова и получите все, но, 'SOMEHASHGOESERE' другой сейчас.
Моя задача - создать веб-гусеничный движок. Я знаю, как делать основную логику. Но есть несколько нюансов. Один из них: что должен делать мой паук, если запрашиваемый url отправляет ему заголовок 'location' и пытается перенаправить? Какая модель поведения должна контролировать мой паук, чтобы быть невозможным превратить его в бесконечный цикл перенаправления?
(как идентифицировать похожие URL-адреса, например http://www.google.de/?gfe_rd=cr&ei=SOMEHASHGOESHERE, которые обычно используют для перенаправления циклов и дают моему пониманию пауков игнорировать такие ссылки)
Если вы пытаетесь просто обработать цель всех перенаправлений, вы можете получить завиток, чтобы следить за URL-адресом, не возвращая страницу перенаправления.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
если вас просто интересует базовый url без параметров url, вы можете легко его легко взорвать:
$urlParts = explode("?",$url);
$baseUrl = $urlParts[0];
CURLOPT_MAXREDIRS
?