Авторские статьи Пишем гулялку [delphi]

Discussion in 'Статьи' started by shadowrun, 22 Jan 2012.

  1. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    .:INTRO:.​


    У новичков часто возникают вопросы относительно написания всяких мелких регеров, чекеров, гулялок и тд. Собственно решил поделиться опытом и осветить моменты, которые, на мой взгляд, вызывают больше всего трудностей. Статейка будет полезна только новичкам, изучающим работу с инетом средствами Делфи. Шарящим можно идти мимо, критиковать, троллить и делать все, что в голову взбредет :D . Взаимодействовать с окаянным будем используя библиотеку indy. Итак, начинаем!


    .:Организация работы:.​


    Есть один интересный сайт http://sprashivay.ru. Сайтег довольно быстро набирает обороты и представляет собой задавалку анонимных вопросов. Одна знакомая барышня ныла по поводу того, что как бы было классно, если бы сайт выдавал оповещение, когда тебе задают новый вопрос... Ну корочь решил я помочь бабенке воплотить ее грязную фантазию в жизнь :cool: . Решил накатать софтину, которая сидела бы на страничке, выжидала, когда зададут вопрос и информировала бы нас об этом. Вот собственно фотка этой красотки:
    [​IMG]
    Глаголить она будет через сообщения в System_Tray, вот как-то так:
    [​IMG]
    Чтобы начать колдовать, нам необходимы следующие ингредиенты:

    - Delphi 7

    - HttpAnalyzer (или другой сниффер)

    - Минимальные знания строения http запросов

    В процессе колдовства будут затронуты следующие аспекты проведения черной мессы:

    - Работа со снифером

    - Отправка данных методами GET и POST.

    - Парсинг страницы

    - Работа с куками


    Нужна новая учетка для экспериментов. Идем на сайт, регимся. Я создал учетную запись, с такими авторизационными данными: логин - [email protected], пароль - antichat. Наша прога должна также уметь проходить регистрацию. Сейчас попытаемся научить ее это делать.

    .:Кодинг:.​


    Включаем снифер, проходим авторизацию на сайте. Видим, что авторизационные данные отправляются скрипту http://sprashivay.ru/login методом POST.
    [​IMG]
    Нужно, чтобы прога делала все в точности также. Создаём новый проект... Добавим на форму Два поля ввода Edit1 и Edit2 (для ввода логина и пароля соответственно), Одну кнопку, которая будет отвечать за регистрацию. Объявляем глобальные переменные:

    С помощью сниффера просматриваем содержание заголовка запроса браузера и формируем такой же для программы (В целях уменьшения кода я сформирую пакет, который содержит не все параметры, но их достаточно, чтобы чтобы сайт подумал, что наша программа - обычный браузер):
    [​IMG]
    В обработчик TForm1.Button1Click добавим следующий код:
    Теперь обратим внимание на то, как были переданы серверу наши авторизационные данные:
    [​IMG]
    Мыло передается в нормальном человеческом виде, а вот с паролем явно что-то не то. Вместо слова antichat мы видим какуе-то х??ню. Я предположил, что цыферки эти не что иное как наш antichat, только в зашифрованном виде. Шифрование происходит по алгоритму MD5. Полностью я в этом убедился, когда сходил на http://www.c0llision.net/ и расшифровал хэш. Из этого исходит, что наш софт также должен уметь шифровать данные для отправки. Пишем код:
    Скажу откровенно, что в этом месте я поимел немало секса, т.к. не учел, что хеш получается из ЗАГЛАВНЫХ букв, а сервер принимает только строчные... Но в итоге проблема была решена с помощью всего одной функции:
    Пробуем отправить наши данные, авторизоваться и сообщить результат авторизации. Вот ответ сервера при успешной авторизации :[​IMG]



    При каждом новом обращении к сайту, мы должны дать ему понять, что мы являемся авторизированным пользователем. Как это делается? С помощью кукисов. Когда юзер удачного проходит авторизацию, скрипт пихает ему кукисы для того, чтобы отличать его от остальной массы народа. Посмотрим на сниффер после удачно пройенной авторизации, нас интересуют кукисы:
    [​IMG]
    По скрину видим, что браузер пихнул нам кук с именем usersession и значением состоящим из 28 букв и цифр. Делфи имеет некоторые стандартные компоненты для работы с кукисами, но мне по нраву выставлять их вручную... В приведенном ниже коде, я спаршу значение кукисов из ответа сервера используя регулярные выражения. Об этом я рассказывать не буду (мб когда нить допишу), просто приведу код. Добавим на форму таймер. он нужен, чтобы прога периодически парсила наш страницу на наличие новых вопросов.
    Следующий кусок кода пишем уже в обработчике таймера.

    На этом все. Ритуал окончен :D

    .:ЭПИЛОГ:.


    Весь подобный софт пишется по данной схеме:

    Авторизация
    Прием/передача кукисов
    Парсинг страниц

    Используя мой пример вам не составит труда разобраться в написании подобного рода программ. Я постарался максимально комментировать код и рассказать более подробно о ключевых ситуациях . Если что не учел, добавлю в ближайшее время.
    Исходники приведу в товарный вид и выложу...
    Линк на прогу: http://slil.ru/32550864
     
    9 people like this.
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    эх,бросал бы ты это дело:)ну, а так хорошо.+
     
  3. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Со статьями проблематично пока... Руку нужно набить :D
     
  4. Alexandr II

    Alexandr II -=ImperatoR=-

    Joined:
    28 Dec 2007
    Messages:
    1,069
    Likes Received:
    671
    Reputations:
    87
    думаю еще видео помогло бы многим)
    или пусть читают! :D
     
  5. Kleymo

    Kleymo New Member

    Joined:
    17 Aug 2011
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Протестил! Работает как описано!
     
    1 person likes this.
  6. linvel

    linvel Elder - Старейшина

    Joined:
    5 Aug 2010
    Messages:
    316
    Likes Received:
    72
    Reputations:
    16
    жду переборщик паролей с прокси и сменным юзер агеном в каждм запросе.
     
  7. swag

    swag Banned

    Joined:
    5 Jan 2012
    Messages:
    35
    Likes Received:
    0
    Reputations:
    0
    перезалей архив