Не так давно пришлось создавать парсер для yandex каталога. И практически сразу же столкнулся с проблемой. Yandex не дает делать много запросов с одного IP, не помогла даже функция slep(). Решил я эту проблему, использовав прокси сервера. В этой статье я напишу как можно легко открывать и обрабатывать страницы через proxy.
Допустим нам необходимо открыть некую страницу через прокси сервер. Пусть это будет - http://market.yandex.ru/model.xml?modelid=3882502&hid=91491&int_lnk=p-goods. Рассмотим код:
$proxy_ip='113.6.255.107';
$proxy_port=80;
$host="market.yandex.ru";
$url="model.xml?modelid=3882502&hid=91491&int_lnk=p-good";
$url=str_replace(" ", "%20", $url);
$sock = fsockopen($proxy_ip, $proxy_port, $errno, $errstr, 10);
if ($sock){
fwrite($sock, "GET /$url HTTP/1.0\r\n" .
"Host: $host\r\n" .
"\r\n");
while (!feof($sock))$text.=fread($sock, 128);
fclose($sock);
echo $text;
Во-первых определяем IP и порт прокси-сервера. Обозначенный выше в свое время работал, но в будущем за него не ручаюсь. Дальше определяем нужный домен и путь к нужной нам странице.
$url=str_replace(" ", "%20", $url);
Этот код заменяет все пробелы специальными символами, что бы при открытии URL не было никаких косяков.
Далее открываем сокет с заданными параметрами. Если все прошло успешно, то в строку HTTP запроса через сокет добавляем данные URL, который нам необходимо открыть, а затем все то, что пришло ответом на запрос полностью считываем в переменную. Затем нам остается только вывести эту переменную и получить на экране нужную страницу. Да, кстати, не забываем закрывать сокет. Если возникнуть вопросы, пишите в комментах. Постараюсь оперативно ответить =)
|