За последние 24 часа нас посетил 20881 программист и 1111 роботов. Сейчас ищет 391 программист ...

Как делать паузы между запросами в cURL?

Тема в разделе "PHP для новичков", создана пользователем php4, 29 июл 2016.

  1. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Подскажите, как делать паузы между запросами в cURL? Немного поясню: у меня есть код, который парсит дату регистрации пользователя Вконтакте через foaf:

    PHP:
    1. <?
    2. if(isset($_POST['submit'])) {
    3. $ch = curl_init("http://vk.com/foaf.php?id=1");
    4. CURLOPT_RETURNTRANSFER => true,
    5. CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0',
    6. CURLOPT_CONNECTTIMEOUT => 10,
    7. CURLOPT_HEADER => 0,
    8. CURLOPT_POST => 0,
    9. ));
    10.  
    11. $response = curl_exec($ch);
    12. }
    13. ?>

    Но через примерно 5 таких запросов, ВК видно блочит то ли ip, то ли UserAgent на какое то время. Один человек подсказал делать паузы между запросами, через sleep(1), но как применить это в моей ситуации, куда это вставить? Или другой метод кто то знает?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    А VkApi не поможет? Другая помощь тебе запрещена правилами форума
     
  3. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    mkramer, к сожалению нет. Vk api в том то и дело не работает только с датой регистрации пользователя, поэтому приходиться парсить через foaf. А почему 'другая помощь запрещена'?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
  5. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Не ну как бы этот парсер же не вор и не кража контента. Он официально создан разработчиками Вконтакте для таких целей. Они недавно это разрешили, а так без их согласия я бы здесь не писал. Ну я хочу узнать не за это, мой вопрос звучит так: "как делать паузы между запросами в cURL?"
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    sleep, тебе уже подсказали. Если разрешили, то в доках написано, какая должна быть пауза. Или у тебя не в цикле запросы? Как ты их в большом кол-ве вызываешь?
     
  7. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Я просто подставляю разные id подряд. Т.е 1, потом 2, 3 и т.д. Примерно на 6 запросе начинают возвращать таймауты. В доках написан только запрос для обращения к этим серверам и что можно определить, а дальше сами. Незнаю, наверное дело не в паузах. Я уже ставил sleep(1), не помогает. И useragent менял, и ip, как они вычисляют? В основном такие сервисы для определения инфо вк обходят эту защиту очень просто, но как?
     
  8. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Покажите доку, где они разрешают парсить курлом.
     
  9. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Именно curl’ом такого нет. Это мой метод, потому что курл имеет больше тонких настроек, чем тот же file_get_contents. Вот ссылка на этот сервер: http://vk.com/foaf.php?id=1
    // вместо 1 любой id пользователя, которого нужно получить.
     
  10. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Это неофициальная фича. Я даже не знаю, как к этому относятся правила форума. Но, скорее всего, раз такой функции нет в API, значит разработчики не хотят её. Значит правилами, вроде как, запрещено.
     
  11. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Это имеет какое-то значение? Если бы это было запрещено Вконтакте, то этот сайт(foaf) был бы для нас всех закрыт. Это можно сказать api номер 2, только с бóльшими функциями, и для более продвинутых
    Сейчас если в поисковике забить "определить инфо вк", высветится примерно 10 таких сервисов. Было бы запрещено, вк давно б уже убрала эту фитчу. Вы боитесь, что вас забанят?
     
  12. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Зачем вам курл, если тут xml? БЯДА! Учите матчасть, не позорьтесь. Это задача для первоклассника.
     
    #12 rodent90, 30 июл 2016
    Последнее редактирование: 30 июл 2016
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Как одно с другим связано? Ну SimpleXML использует что-то вроде file_get_contents внутри. foaf.php неофициальная штука, но вроде как разрешённая. Если вы id меняете руками, то у вас между запусками и так паузы большие, значит контакт не хочет вам разрешать делать много таких запросов.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    А ты хочешь спарсить весь вконтакт? Зачем? В чем бизнес-модель?
     
  15. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Всмысле весь контакт? Мне нужно только выводить дату регистрации пользователя вк по id. Это цель моего сервиса. Сначала получаю через curl, а потом через simplexml_load_file получать нужную мне информацию. Но почему блочится все на 5 запросе? Как этого избегают другие сайты? Меняют ip, useragent, или что еще можно?
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Потому что это не публичный API.

    Правила запрещают помогать парсинг и обход защиты на парсинг.
     
  17. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Ясно, здесь мне не помогут(
     
  18. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Ну дык вот в этом и дело. Если блочится на 5 запросе, значит контакт не хочет, чтобы вы делали больше. Дальше нужно принимать методы обхода. А тут такого не любят. Не потому что боятся бана. Просто не любят.
     
  19. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    Нет, всмысле на любом другом хостинге работает, и на денвере и на OpenServer. А на hostinger 5.5 php не хочет
     
  20. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    php4, какую же ты хуйню делаешь.
    я ща только что сделал 500к запросов и хоть бы раз мне оборвало.
    В цикле запустил. Через DOM и все заебись!
    PHP:
    1. $dom->load('http://vk.com/foaf.php?id=' . $i)
     
    mr.akv нравится это.
  21. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @php4, а, ну так бы сразу и сказал. Вот после этого можно считать, что вк не против и тебе можно помочь.
    В общем, дело не в скриптах твоих. Предсказываю, что ты пользуешься бесплатным хостингом, у которого есть свои ограничения. Они то и мешают
     
  22. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    +, hostinger бесплатный. Ну а так тогда скрипт правильно написан?
     
  23. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @php4, если у вас на другом хостинге работает, то правильно. Хотя красивее написал @rodent90, можете и им воспользоваться
     
  24. php4

    php4 Новичок

    С нами с:
    29 июл 2016
    Сообщения:
    91
    Симпатии:
    0
    А как load точнее использовать? Я с ним не встречался раньше и DOM тоже
     
  25. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    PHP:
    1. $dom = new DOMDocument;
    2. $id = 1;
    3. if($dom->load('http://vk.com/foaf.php?id=' . $id)) {
    4.     echo'<pre>',
    5.     print_r($dom, true),
    6.     '</pre>';
    7. }
     
    mr.akv нравится это.