Подскажите, как делать паузы между запросами в cURL? Немного поясню: у меня есть код, который парсит дату регистрации пользователя Вконтакте через foaf: PHP: <? if(isset($_POST['submit'])) { $ch = curl_init("http://vk.com/foaf.php?id=1"); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0', CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_HEADER => 0, CURLOPT_POST => 0, )); $response = curl_exec($ch); curl_close($ch); } ?> Но через примерно 5 таких запросов, ВК видно блочит то ли ip, то ли UserAgent на какое то время. Один человек подсказал делать паузы между запросами, через sleep(1), но как применить это в моей ситуации, куда это вставить? Или другой метод кто то знает?
mkramer, к сожалению нет. Vk api в том то и дело не работает только с датой регистрации пользователя, поэтому приходиться парсить через foaf. А почему 'другая помощь запрещена'?
Не ну как бы этот парсер же не вор и не кража контента. Он официально создан разработчиками Вконтакте для таких целей. Они недавно это разрешили, а так без их согласия я бы здесь не писал. Ну я хочу узнать не за это, мой вопрос звучит так: "как делать паузы между запросами в cURL?"
sleep, тебе уже подсказали. Если разрешили, то в доках написано, какая должна быть пауза. Или у тебя не в цикле запросы? Как ты их в большом кол-ве вызываешь?
Я просто подставляю разные id подряд. Т.е 1, потом 2, 3 и т.д. Примерно на 6 запросе начинают возвращать таймауты. В доках написан только запрос для обращения к этим серверам и что можно определить, а дальше сами. Незнаю, наверное дело не в паузах. Я уже ставил sleep(1), не помогает. И useragent менял, и ip, как они вычисляют? В основном такие сервисы для определения инфо вк обходят эту защиту очень просто, но как?
Именно curl’ом такого нет. Это мой метод, потому что курл имеет больше тонких настроек, чем тот же file_get_contents. Вот ссылка на этот сервер: http://vk.com/foaf.php?id=1 // вместо 1 любой id пользователя, которого нужно получить.
Это неофициальная фича. Я даже не знаю, как к этому относятся правила форума. Но, скорее всего, раз такой функции нет в API, значит разработчики не хотят её. Значит правилами, вроде как, запрещено.
Это имеет какое-то значение? Если бы это было запрещено Вконтакте, то этот сайт(foaf) был бы для нас всех закрыт. Это можно сказать api номер 2, только с бóльшими функциями, и для более продвинутых Сейчас если в поисковике забить "определить инфо вк", высветится примерно 10 таких сервисов. Было бы запрещено, вк давно б уже убрала эту фитчу. Вы боитесь, что вас забанят?
Как одно с другим связано? Ну SimpleXML использует что-то вроде file_get_contents внутри. foaf.php неофициальная штука, но вроде как разрешённая. Если вы id меняете руками, то у вас между запусками и так паузы большие, значит контакт не хочет вам разрешать делать много таких запросов.
Всмысле весь контакт? Мне нужно только выводить дату регистрации пользователя вк по id. Это цель моего сервиса. Сначала получаю через curl, а потом через simplexml_load_file получать нужную мне информацию. Но почему блочится все на 5 запросе? Как этого избегают другие сайты? Меняют ip, useragent, или что еще можно?
Ну дык вот в этом и дело. Если блочится на 5 запросе, значит контакт не хочет, чтобы вы делали больше. Дальше нужно принимать методы обхода. А тут такого не любят. Не потому что боятся бана. Просто не любят.
Нет, всмысле на любом другом хостинге работает, и на денвере и на OpenServer. А на hostinger 5.5 php не хочет
php4, какую же ты хуйню делаешь. я ща только что сделал 500к запросов и хоть бы раз мне оборвало. В цикле запустил. Через DOM и все заебись! PHP: $dom->load('http://vk.com/foaf.php?id=' . $i)
@php4, а, ну так бы сразу и сказал. Вот после этого можно считать, что вк не против и тебе можно помочь. В общем, дело не в скриптах твоих. Предсказываю, что ты пользуешься бесплатным хостингом, у которого есть свои ограничения. Они то и мешают
@php4, если у вас на другом хостинге работает, то правильно. Хотя красивее написал @rodent90, можете и им воспользоваться
PHP: $dom = new DOMDocument; $id = 1; if($dom->load('http://vk.com/foaf.php?id=' . $id)) { echo'<pre>', print_r($dom, true), '</pre>'; }