VK API: Captcha needed?

TL;DR Лимиты на кол-во запросов с сервера не превышали, но ошибка с капчей появляется постоянно. Кто-нибудь знает как с этим бороться?


Добрый день хабравчане!


В нашем приложении есть, допустим, около 1000 пользователей, у каждого из которых есть свой offline токен для работы с VK API. Приложение выполняется по крону, используя для запросов разные токены пользователей.


Как сказано в FAQ, действуют ограничения на кол-во запросов с сервера:
  • 3 запроса в секунду от каждого уникального пользователя
  • если приложение установило меньше 10 000 человек, то можно совершать 5 запросов в секунду с одного сервера


Данные ограничения нами выполняются даже с запасом: 3 запроса в секунду с разными пользователями. Приложение работает на выделенном IP, других запросов с данного IP не делается.


Суть проблемы — после неопределённого количества запросов начинает постоянно вываливаться ошибка:
Code: 14; Message: Captcha needed


Естественно, если ввести капчу как указано здесь, то несколько запросов пройдет без капчи, а затем ошибка повторится вновь. Т.к. наше приложение работает в offline по крону, то такое положение дел нас совершенно не устраивает.


Пробовали обращаться в ТП:
Обращение 1
Александр Скутин

В последнее время постоянно вылетает ошибка Captcha needed при обращении к API. Как это можно обойти? Какие есть реальные ограничения, и относительно чего они действуют (токена или ip)? Спасибо.

Агент поддержки #519

Здравствуйте, Александр!


Попробуйте, пожалуйста, для начала воспользоваться методом обработки, указанным на странице документации vk.com/dev/auth_direct.


Всегда с Вами,

Команда поддержки ВКонтакте.

Обращение 2
Александр Скутин

Постоянно возникает ошибка Captcha needed, какие действуют реальные ограничения на запросы?

Агент поддержки #720

Здравствуйте, Александр!


Каких-то конкретных ограничений мы назвать не можем. Такая ошибка начинает возвращаться, когда действие происходит слишком часто — см. vk.com/dev/captcha_error


С Уважением,

Команда поддержки ВКонтакте.




Внимание, вопрос…
  1. Зачем ТП рекомендует auth_direct, если в документации черным по белому написано, что от капчи это не спасает? Кто-нибудь пробовал данный способ, может другие ограничения на запросы? В таком случае, чтобы их не превысить, где цифры?
  2. Может кто уже боролся с такой проблемой и знает пуленепробиваемый способ выполнять запросы к API без опасности быть заблокированным?
  3. Если ничего не поможет… Кто-нибудь парсил капчу VK? Базами образов или даже алгоритмами поделитесь? :)



Буду благодарен за любую частичку ценной информации…

P.S. Тех. поддержка VK отвечает сутками и совершенно не информативно. Печаль, беда, бардак в документации...

UPD1:
Появилась информация, что появление капчи зависит от пользователей вашего приложения. Насколько это близко к истине - неизвестно.
  • Вопрос задан
  • 29809 просмотров
Пригласить эксперта
Ответы на вопрос 8
Имел дело, выхода нет. Капчу просит только тогда, когда пользователь и сервер с которого пробуете использовать токен из разных стран/регионов. Проверено более чем на 50к аккаунтах.
Пример:
Пользователь давший права из украины + сервер получающий данные по токену тоже в украине = капчу не просит.
… из украины + сервер получающий данные по токену тоже в украине = капчу не просит.
… не из украины + сервер в украине = капчу просит даже при первом запросе.
… из россии + сервер в украине = капчу просит даже при первом запросе.
… из россии + сервер в россии = капчу не просит.
… из россии (Сибирь) + сервер в россии (МСК) = капчу просит.

Несколько недель пробовали как-то обойти но ничего не вышло, вариант только парсить капчу через какой-то онлайн сервис. Но это долго и проблемно при большом количестве пользователей.
Для себя выбрали решение когда пользователь сам парсит данные из вк и отправляет нам на сервер. При таком раскладе капчу не просит.

Если Вам нужно делать запросы когда пользователь оффлайн, можно перекинуть эту работу на пользователей которые онлайн :). Смотря какое у Вас приложение.
Ответ написан
@Zafon
Искал решение на эту проблему долгое время , случайно она решилась после того как сайт на котором работал скрипт с VK API хостер перенёс с сервера Украины на сервер в Германию.
Скрипт перестал работать и стал запрашивать при первом же обращении к VK каптчу.
Но пока сайт стоял на сервере в Украине всё работало нормально,установил этот скрипт на другой сайт который находился на сервере в Украине и вуаля - всё работает.
Спрашивается почему? Да потому ,что токен получал пользователь у которого IP был Украинский и скрипт работал с Украинского IP.
Что я сделал - получил токен используя IP Германии.
Зашёл через Германский прокси сервер в ВК,получил токен,ввёл в настройках скрипта новый токен и всё заработало.
Отсюда делаем выводы ,что токен нужно получать с той же страны где работает скрипт или программа.
Если не совпадают то срабатывает система защиты ВК и просят ввести каптчу.
Ответ написан
Комментировать
@romaro
Правильно ли я понимаю, что если использовать метод-обертку execute, в который можно добавить до 25 вызовов PHOTOS.save, то можно кратно сократить кол-во возвращаемых капч, т.к. в случае правильного решения капчи будет создано сразу 25 фотографий в альбоме вместо того, чтобы вводить капчу для каждой фотографии?
Ответ написан
Комментировать
habrsa
@habrsa
То что вы привели ограничение — это ограничение на throttling.

Какие конкретно действия выполняются?
Опыта с VK API было не вот что много, но как мне показалось Captcha needed «особенно» часто появляется при выполнение запросов, с помощью которых возможен спам: пост на стене, редактирование, отправка сообщения, редактирование описания к фотографии… в общем все, что оставляют «след» и другие пользователи могут увидеть.

У меня есть скрипт, который также работает по крону и синхронизирует раз в день пару крупных интернет магазинов с фото-альбомами в группе жены, работает из под одного пользователя — заливает фотки в VK или меняет описание фотки.
Так вот при постоянных запросах на изменение описания фотки избавиться от captcha_needed я смог только поставив timeout в 2 секунды, насколько я помню ни 1 ни 1,5 секунды timeout мне не помог.
С остальными типами запросов на чтение к примеру фоток проблем не было никаких, так же делал выгрузку тысяч фоток из вк, там таймауты вообще не понадобились, ни разу капчу не показал.
Ответ написан
habrsa
@habrsa
Если запросы не требует «установки приложения», то тогда в принципе просто, можно разнести запросы на разные приложения и на разные IP.
Если требуют установки… ну можно попробовать с разных IP делать запросы с того же приложения, может быть поможет.
Выдавать подробности «блокировки» VK никогда не будет, так как это позволит просто её обходить.

Сам интересуюсь данной тематикой, если будут какие то результаты — отпишитесь пожалуйста здесь.

P.S. промазал чуток с комментарием
Ответ написан
nukex
@nukex
Недавно столкнулся с такой же проблемой, при работе с методом audio.search. Да, все зависит от качества токена, точнее от параметров аккаунта пользователя (регион, привязка телефона, возраст аккаунта). Раньше, как я понимаю, была только — привязка телефона.
Ответ написан
Комментировать
@Chukchuk
У меня такая же проблема,,Есть новости по этому вопросу? может поменяли api или что-то..
Ответ написан
Комментировать
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
Тоже столкнулись с данной проблемой и даже нашли причину. Может кому будет полезно:
В общем приложение наше было довольно конкурентным. И случалось такое, что пользователь использовал какое-то конкурентное приложение, а потом подключал наше. И пользователи конечно же забывали выключить конкурентное приложение. Тем самым в сообществе пользователя работало сразу 2, а то и 3 схожих по функционалу приложений. Тем самым в вк шли запросы от всех этих приложений и он начинал выдавать капчу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы