Как в 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."
 
Тема статьи
Нестандартные хаки
Номер конкурса статей
Второй конкурс статей

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
Вместо Charles, лично мое имхо, лучше использовать Fiddler, и бесплатен и может больше.
А вообще бы, очень хотелось чтобы разрабы прикрутили к браузеру возможность вызывать консоль как в любом фф, т.к. штатныи средствами частенько понять как и что происходит на странице очень тяжело, приходится брать обычный браузер и ловить в нем проблему, а потом, с ней разбираться.
 

Vasar

Client
Регистрация
08.04.2010
Сообщения
150
Благодарностей
75
Баллы
28
Мне он просто показался более сложным.
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113

bezvozni

Client
Регистрация
31.03.2013
Сообщения
306
Благодарностей
29
Баллы
28
Ребята, мне обычным пост запросом нужно проверить яндекс почту на валидность. Перечитал статью, опробовал - нифига не понял) Познаний - ноль. Может есть какие то рекомендации?

Или готовое решение?)))
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
За вас написать целиком шаблон, или может быть вы укажете более конкретно проблему, и желательно в отдельной теме ?
 
  • Спасибо
Реакции: Nick

Vasar

Client
Регистрация
08.04.2010
Сообщения
150
Благодарностей
75
Баллы
28
Ребята, мне обычным пост запросом нужно проверить яндекс почту на валидность. Перечитал статью, опробовал - нифига не понял) Познаний - ноль. Может есть какие то рекомендации?

Или готовое решение?)))
Демо шаблон посмотрел?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
А я знаю как еще в 100 раз увеличить скорость. Пихнуть все в один сниппет :D А так по теме - статья норм, да вот только для кого она? Начинающий не поймет из статьи ничего, так как сразу объяснять на примере ВК это hardcore, да и примеров маловато. Продвинутый пользователь это итак знает. :bt:
 
Последнее редактирование:

Vasar

Client
Регистрация
08.04.2010
Сообщения
150
Благодарностей
75
Баллы
28
Для начинающих, я бы понял если вы в своё время прочитал. Буду ждать вопросов от заинтересовавшихся. Сниппеты - это уж совсем из ряда фантастики. Почему не поймёт, я ведь не просто написал, но ещё и готовый шаблон сделал, который сам по себе является обучающим материалом.
 
  • Спасибо
Реакции: speaker

speaker

Client
Регистрация
13.10.2012
Сообщения
287
Благодарностей
45
Баллы
28
Vasar,
Спасибо за статью, как раз изучаю вопрос. Думаю очень поможет для обучения, если возникнут вопросы напишу.
 

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

Как работать с капчами через запросы ?
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
коробка то закрыта )
то есть смысл подгружать картинку на страницу если вся работа идет на запросах?
один раз нужно написать действующий код для перевода и жизнь удалась
 

Parkho

Client
Регистрация
20.06.2014
Сообщения
131
Благодарностей
16
Баллы
18
Если ошибка всё ещё осталась, пока способ лечения не найден (у меня на facebook.com почему то не срабатывает, да и с vk.com возникла проблема, при этом выдавая маразматическое объяснение "Сертификат не будет действителен до 28.08.2014 3:00. Текущее время — 24.11.2014 16:49."
Было что-то похожее на лисе, кнопку игнорить не показывало, только ругалось. Потому перешел на фидлер, там все работает :-)
 
Регистрация
18.01.2014
Сообщения
149
Благодарностей
13
Баллы
18
По скольку автор пропал еще неделю назад, спрошу тут: Где взять халявный Charles? Скачивал всякие 3.5.2 но они почему то не работают.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
fiddler используйте)
 
  • Спасибо
Реакции: Асталис
Регистрация
18.01.2014
Сообщения
149
Благодарностей
13
Баллы
18
нашел* делите)
 
Регистрация
18.01.2014
Сообщения
149
Благодарностей
13
Баллы
18
А его нельзя использовать с другими браузерами? Только этот епаный ИЕ ?
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
фидлер работает как прокси
хром подхватывается сразу
опере и зенке нужно прописать прокси фидлера
по умолчанию проксик находится по адресу localhost:8888
если хотите другой адрес, можете указать его внастройках фидлера
 
  • Спасибо
Реакции: Асталис

Vasar

Client
Регистрация
08.04.2010
Сообщения
150
Благодарностей
75
Баллы
28
  • Спасибо
Реакции: Асталис

atheroth

Client
Регистрация
06.06.2014
Сообщения
127
Благодарностей
17
Баллы
18
А я знаю как еще в 100 раз увеличить скорость. Пихнуть все в один сниппет :D А так по теме - статья норм, да вот только для кого она? Начинающий не поймет из статьи ничего, так как сразу объяснять на примере ВК это hardcore, да и примеров маловато. Продвинутый пользователь это итак знает. :bt:
Открыл шаблон, действительно "хардкор".

Начал изучать get/post запросы - лишил мозг девственности)))
 

russya

Client
Регистрация
08.07.2014
Сообщения
743
Благодарностей
78
Баллы
28
для начинающих очень сложно. Много чего не понятного. Может есть где мануал более подробный про get и post запросы?
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
для начинающих очень сложно. Много чего не понятного. Может есть где мануал более подробный про get и post запросы?
А что сложного?
Запускаешь фиддлер, браузер - смотришь что идет в логи фидлера после операций в браузере. (в 50% случаях.. в Post запросе нужно лишь выпарсить куки, какой-то элемент с исходной страницы, и вписать свои значения).
В моей статье на конкурсе, есть уже такие примеры.
 

Geograph

Client
Регистрация
16.02.2014
Сообщения
209
Благодарностей
114
Баллы
43
Спасибо за статью, но использовать ZennoPoster, чтобы писать на C# как-то странно. Лучше и правильнее использовать для этого Microsoft Visual Studio :-)
 

execut0r

Client
Регистрация
12.03.2014
Сообщения
263
Благодарностей
271
Баллы
63
Господа! А подскажите, как быть, если я, допустим, хочу какой то определенный момент на пост-гетах сделать в своем проекте.
Собственно вопрос - Как мне куки (выпаршенные пост-гетом и записанные в переменную) в браузер инстанса/проекта вставить, что бы потом дальше продолжать работать как обычно или же наоборот, как из браузера инстанса/проекта взять куки для единичного пост-гет запроса?
Мне кажется, должно быть все просто и я чего то упускаю.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
вот методы:
получить прокси из инстанса https://help.zennolab.com/en/v5/zennoposter/5.4/ZennoLab.CommandCenter~ZennoLab.CommandCenter.Instance~GetCookie.html
сохранить https://help.zennolab.com/en/v5/zennoposter/5.4/ZennoLab.CommandCenter~ZennoLab.CommandCenter.Instance~SaveCookie.html
загрузить https://help.zennolab.com/en/v5/zennoposter/5.4/ZennoLab.CommandCenter~ZennoLab.CommandCenter.Instance~LoadCookie.html
но проще имхо сохранить полностью профиль и делать запросы с ним если нужно
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
но проще имхо сохранить полностью профиль и делать запросы с ним если нужно
очень частно каждый запрос требует дополнительных заголовков так что, либо подрузка профиля, либо кастомный запрос с вытащеными через instance.GetCookie куками
 

gluckbahr

Client
Регистрация
05.04.2014
Сообщения
84
Благодарностей
25
Баллы
18
Вопрос, что эти данные означают?
16481<!><!>0<!>6590<!>2<!>485585959115<!>0.
или вот у меня пример
<!--17056<!><!>0<!>6593<!>5<!>
 

gluckbahr

Client
Регистрация
05.04.2014
Сообщения
84
Благодарностей
25
Баллы
18

jonvy

Client
Регистрация
28.11.2015
Сообщения
305
Благодарностей
17
Баллы
18
Ну например
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
Все ветки форума связанные с эксмо вопросами закидал. Молчат коллеги))
Решил вот на соседние ветки перекинуться))
 

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