В PHP есть супермощный класс CURL - который позволяет полностью эмулировать соединения с различными параметрами. С помощью небольшого тюнинга можно добиться, что наш скрипт будет неотличим от браузера управляемым человеком.
Зачем это нужно? Опыт показывает, что, например, поисковые системы - скрипту эмулирующему браузер перекрывают кислород намного позже.
Чем браузер отличается от скрипта? Он передаёт строку юзер-агента, сохраняет и отдаёт куки, передаёт сточку реферера (адрес страницы откуда пришли) - мы будем делать то же самое.
Простейший способ использования CURL:
$url = "http://www.site.com";
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);
Текст страницы оказывается в переменной $str - с ним потом можно делать всё что угодно.
Теперь тюнингуем наш простейший скрипт.
1. Добавляем сточку юзер-агента
$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
Строчку юзер-агента можно вставить любого популярного браузера. Это - для Microsoft Outlook 6.0. Также браузер часто передаёт версию ОС и некоторые параметры - например тут версию .NET.
2. Если вызываем несколько страниц на сайте, сохраняем и отдаём куки
$cookie_file = " ..тут вставляем путь к файлу ..";
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
Многие сервисы "отсеивают" скрипты - устанавливая, а затем запрашивая переменную в куки. Путь к куки файлу должен быть полный. При запуске скрипта - желательно удалить файл куки, оставшийся от предыдущей работы скрипта. Также для файла сохраняющего куки, или для папки куда он сохраняется - должны стоять права на запись.
3. Передаём реферера.
Реферер - это адрес страницы, указывающий откуда пришёл пользователь, т.е. адрес страницы на которой была ссылка или форма, действие которой привело на текущую страницу.
curl_setopt($ch, CURLOPT_REFERER, "http://site.com");
Для чего это нужно? Некоторые сервисы могут его проверять и делать определённые выводы. Например, для парсинга страниц результатов поиска Google - можно установить реферер http://google.com - т.е. мы показываем наш эмулятор браузера - "пришёл" на страницу с результатами поиска с главной страницы.
4. Делаем небольшую паузу между запросами
Юзер не кликает страницы друг за другом, а просматривает их через определённое время, поэтому, в случае, если запрашиваем много страниц циклом - нужно обязательно вставить небольшую паузу.
sleep(5);
Также можно сделать случайную паузу, например от 2 до 10 секунд.
sleep( rand(2,10) );
5. Использование прокси
Чтобы совсем замаскировать следы - можно использовать прокси.
curl_setopt($ch, CURLOPT_PROXY, "111.222.333.444:5555");
Нужно удалять файл куки перед сменой прокси.
Инструкции для эмуляции браузера с использованием CURL получаются следующие:
$url = "http://www.site.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$cookie_file = " ..тут вставляем путь к файлу ..";
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_REFERER, "http://site.com");
curl_setopt($ch, CURLOPT_PROXY, "111.222.333.444:5555"); //Прокси - если необходимо
$str = curl_exec($ch);
curl_close($ch);
...
sleep( rand(2,10) );