Как в 100 раз ускорить выполнение шаблонов при помощи POST и GET запросов

Vasar

Client
Регистрация
08.04.2010
Сообщения
150
Реакции
75
Баллы
28
Приветствую всех. Это статья для конкурса № II проводимого в 2014 году на сайте http://zennolab.com/.

Думаю, каждый из нас, кто мало-мальски серьёзно занимается созданием автоматов для WEB сталкивался с проблемами чрезмерного потреблением ресурсов (оперативная память, жёсткий диск, трафик), недостатком скорости работы и возникновением ошибок в шаблоне, по причине медленных прокси или неполной загрузки сайта.

Сразу оговорюсь, перечисленные проблемы вовсе не связаны с самой программой, и на мой взгляд ZennoPoster оптимизирован достаточно хорошо. И надо отдать должное разработчикам, они постоянно улучшают производительность своего продукта, за что им отдельная благодарность. А связаны они с тем, что сайты с каждым годом становятся всё более навороченными и тяжёлыми, а скорость их работы более медленной.
Введение

Вот почему, каждый раз разрабатывая очередной постер я задумывался о переходе на GETи POST запросы, потому что я видел различные программы, которые работали в разы быстрее чем мои шаблоны на ZP, а кушали меньше, но я не программист, чтобы писать на чистом C#, но ведь у нас есть ZennoPoster, так что проблему удалось решить вполне успешно.

Взаимодействие с сайтом при помощи POST и GET запросов имеет свои преимущества и недостатки.

Начну с преимуществ:
  • Лёгкость (в смысле веса) - пожалуй главное преимущество данного подхода. Программе не надо выполнять рендер страницы, не надо подгружать лишние файлы, привязанные к странице (css, js, изображения и др.), происходит значительная экономия ресурсов компьютера.
  • Скорость - чтобы выполнить действие вам нужно просто отправить запрос, при этом не нужно загружать страницу, искать и жать на ней кнопку и выполнять другие действия, просто оправляете или берёте то что вам нужно и проверяете ответ. Таким образом где при обычном подходе уже на 10 потоках ощущается загрузка компьютера и падение скорости, при применение POSTи GET запросов и на 100 потоках всё будет работать гладко.
  • Работая с POSTи GET запросами, вы в буквальном смысле сможете разобрать сайт по косточкам и получить глубокое понимает процессов, происходящих внутри него, и если даже не получится полностью сделать шаблон на запросах, эти знания помогут вам обойти всевозможные антиспам защиты. Например, когда я делал регалку профилей для одного сайта знакомств, то при регистрации обнаружил интересный запрос с методом "method=log.registrationTime", который отправлялся после первой страницы загрузки регистрации, указывающий на то, что при регистрации, антиспам защита вероятно учитывает время заполнения формы, после чего я подогнал время в шаблоне на заполнение от 30 до 50 секунд.
Кажется, что преимуществ не так ужи и много, но поверьте они системные и перевернут вашу работу и понимание сайтов с ног на голову.

Теперь поговорим о недостатках:
  • Кажущаяся сложность - от освоения в полной мере данного метода меня останавливал, так называемый "страх подхода", так как я не понимал механизма, не понимал, как работать с этим инструментом и с чего начать. Но начал я, как ни странно, с видео по разработке бота для игры на C#, в котором открыл для себя Charles, и это не мой приятель из США, а офигенский прокси-перехватчик запросов, которых открыл мне глаза на то как работают сайты.
  • Избыточность - необходимость создавать дополнительные шаги для некоторых операций, например, получение куки, из это вытекает следующий недостаток.
  • Более медленная скорость создания шаблонов.
  • Отладка сложнее, так как визуально не увидеть где застряло и что вообще происходит.
Подготовка
Хорошо, теперь пришло время перейти к делу. Для работы нам понадобятся следующие инструменты:
  1. ZennoPoster
  2. Charles (продукт платный, но я думаю вы знаете, что с этим делать, а если не знаете, пишите в ЛС)
  3. Mozilla Firefox (+ Adblock Plus, Cookie Controller, Firebug, Proxy Tool, Search Site, по желанию)
  4. Голова (где скачать не знаю, если найдёте, скиньте пожалуйста ссылочку в ЛС)
Честно говоря, регистраторы я не люблю, с ними работать достаточно сложно, и нужно особо готовиться, тратить почтовые ящики, искать прокси. Так что, предлагаю рассмотреть работу постера, тем более методы работы и приёмы одинаковые, что там, что там.

Будем делать бота для сайта https://vk.com/, который будет искать случайные профили, и лайкать посты на стене.

Для начала все программы нужно установить и настроить на работу. Ставьте сначала Firefox, затем Charles. Думаю, тут вы сами разберётесь. Если всё сделали правильно, то в Firefox появится расширение под названием "Charles Autoconfiguration".

Социальная сеть, с которой мы будем работать использует защищённый протокол SSL, так что форсируйте использование незащищённого протокола вбив адрес http://vk.com в адресную строку, как использовать SSL читайте ниже, но там возник ряд проблем, которые мне победить не удалось, но может вам удастся.

Создание шаблона

В новых версиях ZP появилась возможность передавать куки из инстанса в файл и обратно, и можно было бы реализовать вход на сайт при помощи обычных действий, и потом использовать куки для необходимых нам операций, но это ведь обучающая статья, не так ли? Поэтому мы пойдём по более сложному пути и сделаем всё на POST и GET запросах.

Чтобы нормально работать с проектом нам нужно добавить "Ссылки из GAC" - "System.Web 4.0.0.0", и прописать в "Директивы using" - "using System.Web;".

own_code_using.png


Заходим в FF в VK при включёном прокси, и логинимся. Ищем в Charles POST запросы и видим следующую картину.

Делаем выводы, что для того чтобы нормально залогиниться, нам нужен параметр ip_h, логин, пароль и куки. Добываем куки и ip_h со страницы http://vk.com/login.php.

post-login.png


Чтобы понять откуда берётся тот или иной параметр в запросах, нужно использовать поиск по действиями и их внутренностям.

Сразу возникает проблема, информация, получаемая в UTF-8 отображается некорректно, по заголовкам мы видим, что VK использует кодировку windows-1251, её и ставим на настройках GET и POST действий.

Далее записываем куки для будущего использования.
Настало время перейти к поиску пользователей, которых будем лайкать. Обычный поиск VK возвращает только 20 результатов за 1 запрос, делаем цикл, с добавление параметра offset.

Когда лайк поставлен нормально, то в ответе будет "like_my":true, а если встретилась капча, то что-то вроде 16481<!><!>0<!>6590<!>2<!>485585959115<!>0. Длинная цифра - это id, который нужно использовать для получения капчи, GET запросом
https://vk.com/captcha.php?sid=485585959115&s=1.

Если получать капчу при помощи GET запроса, то она приходит в виде бинарных данных, как их приобразовывать я не знаю, поэтому будем грузить капчу в инстанс и оттуда оправлять на распознавание.

То, что у нас получилось в итоге вполне себе рабочий вариант, который можно улучшать и дополнять и получить в конечно варианте нечто вроде этого (то что показано на изображении к vk отношения не имеет).

bigproject.png


Вы ограничены только вашей фантазией, так как ZennoPoster предоставляет невероятно широкие возможности для автоматизации работы с сайтами, а благодаря наработкам, встроенным в этот мощный программный комплекс, скорость разработки автоматизированных решений увеличивается многократно, по сравнению с созданием чего-то с 0.

Лично для меня ZennoPoster стал ключом в захватывающий мир программирования, чем надеюсь станет и для вас.

PS. Если статья помогла вам разобраться в теме, я буду очень рад.

Отдельная благодарность сообществу, так как кое-что использовал из уже существующих тем на форуме и разработчикам за отличный продукт.

Ответы на вопросы
Вопрос: Что делать если сайт использует SSL шифрование по защищённому протоколу https.
Ответ: В Charles нужно зайти Proxy > ProxySettings > SSL и прописать там "*vk.com*:443.
Когда попытаемся зайти на сайт, через прокси, в FF появится предупреждение "Это соединение является недостоверным".

vk-ssl.png


Данная проблема решается 2 способами:
Способ 1 - В FF > Инструменты > Charles > InstallCharlesCASSLCertificate.
Способ 2 - Добавить в исключения браузера FF, но если у вас не будет кнопки "Я понимаю риск", нужно сделать следующее: в браузерной строке вбить about:config, в поиске указать browser.xul, и изменить параметр browser.xul.error_pages.expert_bad_cert в значение true. И тогда нужная нам кнопка появится, и можно будет продолжить работу. Нужно будет нажать "Я понимаю риск" > "Добавить в исключения". Если ошибка осталась, то нужно зайти в about:permissions, и нажать на кнопку "Забыть об этом сайте". Если ошибка всё ещё осталась, пока способ лечения не найден (у меня на facebook.com почему то не срабатывает, да и с vk.com возникла проблема, при этом выдавая маразматическое объяснение "Сертификат не будет действителен до 28.08.2014 3:00. Текущее время — 24.11.2014 16:49."
 
Номер конкурса статей
  1. Второй конкурс статей
Тема статьи
  1. Нестандартные хаки

Вложения

Последнее редактирование:
Вместо Charles, лично мое имхо, лучше использовать Fiddler, и бесплатен и может больше.
А вообще бы, очень хотелось чтобы разрабы прикрутили к браузеру возможность вызывать консоль как в любом фф, т.к. штатныи средствами частенько понять как и что происходит на странице очень тяжело, приходится брать обычный браузер и ловить в нем проблему, а потом, с ней разбираться.
 
Мне он просто показался более сложным.
 
Ребята, мне обычным пост запросом нужно проверить яндекс почту на валидность. Перечитал статью, опробовал - нифига не понял) Познаний - ноль. Может есть какие то рекомендации?

Или готовое решение?)))
 
За вас написать целиком шаблон, или может быть вы укажете более конкретно проблему, и желательно в отдельной теме ?
 
  • Спасибо
Реакции: Nick
Ребята, мне обычным пост запросом нужно проверить яндекс почту на валидность. Перечитал статью, опробовал - нифига не понял) Познаний - ноль. Может есть какие то рекомендации?

Или готовое решение?)))
Демо шаблон посмотрел?
 
А я знаю как еще в 100 раз увеличить скорость. Пихнуть все в один сниппет :D А так по теме - статья норм, да вот только для кого она? Начинающий не поймет из статьи ничего, так как сразу объяснять на примере ВК это hardcore, да и примеров маловато. Продвинутый пользователь это итак знает. :bt:
 
Последнее редактирование:
Для начинающих, я бы понял если вы в своё время прочитал. Буду ждать вопросов от заинтересовавшихся. Сниппеты - это уж совсем из ряда фантастики. Почему не поймёт, я ведь не просто написал, но ещё и готовый шаблон сделал, который сам по себе является обучающим материалом.
 
  • Спасибо
Реакции: speaker
Vasar,
Спасибо за статью, как раз изучаю вопрос. Думаю очень поможет для обучения, если возникнут вопросы напишу.
 
коробка то закрыта )
то есть смысл подгружать картинку на страницу если вся работа идет на запросах?
один раз нужно написать действующий код для перевода и жизнь удалась
 
Если ошибка всё ещё осталась, пока способ лечения не найден (у меня на facebook.com почему то не срабатывает, да и с vk.com возникла проблема, при этом выдавая маразматическое объяснение "Сертификат не будет действителен до 28.08.2014 3:00. Текущее время — 24.11.2014 16:49."
Было что-то похожее на лисе, кнопку игнорить не показывало, только ругалось. Потому перешел на фидлер, там все работает :-)
 
По скольку автор пропал еще неделю назад, спрошу тут: Где взять халявный Charles? Скачивал всякие 3.5.2 но они почему то не работают.
 
fiddler используйте)
 
  • Спасибо
Реакции: Асталис
А его нельзя использовать с другими браузерами? Только этот епаный ИЕ ?
 
фидлер работает как прокси
хром подхватывается сразу
опере и зенке нужно прописать прокси фидлера
по умолчанию проксик находится по адресу localhost:8888
если хотите другой адрес, можете указать его внастройках фидлера
 
  • Спасибо
Реакции: Асталис
А я знаю как еще в 100 раз увеличить скорость. Пихнуть все в один сниппет :D А так по теме - статья норм, да вот только для кого она? Начинающий не поймет из статьи ничего, так как сразу объяснять на примере ВК это hardcore, да и примеров маловато. Продвинутый пользователь это итак знает. :bt:
Открыл шаблон, действительно "хардкор".

Начал изучать get/post запросы - лишил мозг девственности)))
 
для начинающих очень сложно. Много чего не понятного. Может есть где мануал более подробный про get и post запросы?
 
для начинающих очень сложно. Много чего не понятного. Может есть где мануал более подробный про get и post запросы?
А что сложного?
Запускаешь фиддлер, браузер - смотришь что идет в логи фидлера после операций в браузере. (в 50% случаях.. в Post запросе нужно лишь выпарсить куки, какой-то элемент с исходной страницы, и вписать свои значения).
В моей статье на конкурсе, есть уже такие примеры.
 
Спасибо за статью, но использовать ZennoPoster, чтобы писать на C# как-то странно. Лучше и правильнее использовать для этого Microsoft Visual Studio :-)
 
Господа! А подскажите, как быть, если я, допустим, хочу какой то определенный момент на пост-гетах сделать в своем проекте.
Собственно вопрос - Как мне куки (выпаршенные пост-гетом и записанные в переменную) в браузер инстанса/проекта вставить, что бы потом дальше продолжать работать как обычно или же наоборот, как из браузера инстанса/проекта взять куки для единичного пост-гет запроса?
Мне кажется, должно быть все просто и я чего то упускаю.
 
вот методы:
получить прокси из инстанса https://help.zennolab.com/en/v5/zen...ennoLab.CommandCenter.Instance~GetCookie.html
сохранить https://help.zennolab.com/en/v5/zen...nnoLab.CommandCenter.Instance~SaveCookie.html
загрузить https://help.zennolab.com/en/v5/zen...nnoLab.CommandCenter.Instance~LoadCookie.html
но проще имхо сохранить полностью профиль и делать запросы с ним если нужно
 
но проще имхо сохранить полностью профиль и делать запросы с ним если нужно
очень частно каждый запрос требует дополнительных заголовков так что, либо подрузка профиля, либо кастомный запрос с вытащеными через instance.GetCookie куками
 
Вопрос, что эти данные означают?
16481<!><!>0<!>6590<!>2<!>485585959115<!>0.
или вот у меня пример
<!--17056<!><!>0<!>6593<!>5<!>
 
А что сложного?
Ну например
1. Отправка на сервер заголовков. Куда их в кубике post запроса пихать?
2. POST данные. Куда их в кубике post запроса пихать?
3. POST-параметр. Куда их в кубике post запроса пихать?
да и все мелочи вроде "не там запятую недопоставил" которые те кто в этом разбирается даже не замечает

Я уже куеву тучу времени потратил на

URL — необходимо использовать следующий адрес https://api.exmo.com/v1/{api_name} где api_name - это наименование API метода

Авторизация осуществляется с помощью отправки на сервер следующих заголовков:

Key — Публичный ключ, его нужно взять настройках профиля пользователя
(пример: K-7cc97c89aed2a2fd9ed7792d48d63f65800c447b)

Sign — POST данные (param=val&param1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя

Существует возможность привязать несколько ключей к одному аккаунту для доступа к API. Для этого обращайтесь в техподдержку.

Дополнительно во всех запросах должен находиться обязательный POST-параметр nonce с инкрементным числовым значением (>0). Это значение не должно повторяться или уменьшаться.


Всё по отдельности сделал, во всём вроде разобрался, НО как только я всю эту хрень в кубик не трамбовал....)))
Может у кого какие идеи? https://yadi.sk/d/UdBAo66l3QXNH4
Все ветки форума связанные с эксмо вопросами закидал. Молчат коллеги))
Решил вот на соседние ветки перекинуться))
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)