Авторизация на сайте средствами Delphi

Дата публикации

Здравствуйте, давненько я ничего нового тут не писал. Вот сегодня исправляюсь. Буду повествовать о том как можно реализовать регистрацию на сайте средствами Delphi. Для того, чтобы пример имел наибольшую ценность, авторизовываться будем на сайте, написанном на joomla. Но этот пример подойдет для авторизации и на других сайтах. Для реализации наших задумок нам потребуется перехватчик пакетов ( я использовал для перехвата данных Tamper Data) . Итак приступим.

1. Открываем Delphi и создаем новый проет.

2. Кидаем на форму следующие компоненты: два Edit, button, idhttp, idcookiemanager, idantifreeze. 

3. Выбираем сайт - жертву, шутка конечно - ничего страшного с сайтом не произойдет. Можете даже потренироваться на данном сайте.

4. Открываем страницу авторизации, в нашем случае это http://fegorsk.ru/index.php/fmeshchkshyafsshnf

5. Запускаем перехватчик и смотрим какие данные отправляются на сайт при нажатии кнопки "Войти". Если у Вас нет желания этим заниматься или Вы не умеете перехватывать пакеты не беда, я уже все сделал за Вас. Дальше все будет понятно.

Вот что я перехватил:

Delphi авторизация на сайте

Итак можно увидеть, что мы отправляем на сайт переменные login, password, submit, option, task,return и ещё одну переменную со страшным названием. Опытным путем я выяснил, что нам пригодятся только две первые переменные и две последние. Две первые переменные, с ними все ясно - это наши логин и пароль от сайта. А вот две последние мы получим из исходного кода страницы авторизации (http://fegorsk.ru/index.php/fmeshchkshyafsshnf). У предпоследней переменной будет постоянно меняться значение, а у последней название. Именно поэтому мы их будем получать программно каждый раз при попытке авторизации.

Итак приступим.

6. в обработчик клика по кнопке пишем следующий код:

 

procedure TForm1.sButton1Click(Sender: TObject);
var
  str: TStringList; // Переменная в которой будем формировать запрос на сайт
  myreturn, my1, bufer: string;
  // В этих переменных будем хранить те самые пару значений из переловленного запроса.
begin
  IdHTTP1.Request.AcceptCharSet := 'windows-1251';
  str := TStringList.Create;
  myreturn := IdHTTP1.Get('http://fegorsk.ru/index.php/fmeshchkshyafsshnf'); // Отправляем запрос на страницу авторизации
  // --Ищем в коде страницы авторизации переменные, которые нам нужно будет отправить. Все те же последнюю и предпоследнюю переменные из перехваченного запроса.
  Delete(myreturn, 1, Pos('name="return" value="', myreturn) + 20);
  bufer := myreturn;
  Delete(myreturn, Pos('" />', myreturn), Length(myreturn));
  my1 := bufer;
  Delete(my1, 1, Pos('name=', my1) + 5);
  Delete(my1, Pos('"', my1), Length(my1));
  myreturn := 'return=' + myreturn;
  my1 := my1 + '=1';
  // ---------------------------------------------------------------------------------
  // Формируем POST запрос
  str.Add('username=' + Edit1.text); // Добавляем в запрос переменную username
  str.Add('password=' + Edit2.text); // Добавляем в запрос переменную password
  str.Add(myreturn); // Добавляем ранее найденную переменную myreturn
  str.Add(my1); // И переменную my1
  bufer := IdHTTP1.Post
    ('http://fegorsk.ru/index.php/fmeshchkshyafsshnf?task=user.login', str);
  // Сформированный Post запрос отправляем на сервер, адрес мы узнали из перехваченнгого пакета.
  bufer := IdHTTP1.Get('http://fegorsk.ru/index.php/fmeshchkshyafsshnf');
  // Возвращаемся на страницу авторизации
  if Pos('Выйти', bufer) > 1 then
  // На странице должна появиться кнопка с надписью "Выйти".
  begin
    ShowMessage('Все ок'); // Если она есть - все ок
  end
  else
    ShowMessage('Проверьте Логин/пароль'); // Если не все - то не ок
  str.Destroy;
end;

 

Вот и все, если что не понятно, то пишите, все объясню. Возможно даже сниму видеоурок.

 

 

Добавить комментарий



Обновить

Комментарии   

 
0 #17 VMZ 18.10.2016 15:06
Добрый день! Внимательно проштудировал, подцепил расширение Tamper, получил нужные данные, однако так и не смог добиться авторизации на сайте myparcels.ru. :sad: Может быть вы попробуете? :oops:
Цитировать
 
 
+1 #16 sanjok 29.11.2015 12:42
просто не реально :cry:
Цитировать
 
 
-1 #15 sanjok 29.11.2015 12:41
кто зделает скрипт на авторизацию http://murclub.ru/
Цитировать
 
 
+1 #14 Maxim 15.12.2014 16:40
Цитировать
 
 
0 #13 Максим 15.12.2014 16:32
Maxim, можно ли узнать вашу электронную почту? Есть еще проблема с кодом, в комментарии нет возможности описать всю проблему.
Цитировать
 
 
0 #12 Maxim 15.12.2014 12:04
чтобы проверить результат можно снова получить код страницы авторизации и проверить, есть ли на ней слово "Выйти". Если есть, то авторизация прошла успешно.
В этом примере нельзя проверить результат не перезагружая страницу.
Цитировать
 
 
0 #11 Максим 15.12.2014 03:24
И у меня еще один вопрос: как сделать проверку входа, либо совершения любого другого действия на странице, если это действие обрабатывает какой-либо скрипт, а при перезагрузке страницы этот результат стирается?Т.е. результат действия не сохраняется после перезагрузки страницы.
Я так понял, эта строчка загружает страницу, перезагружая ее(саму страницу):
IdHTTP1.Get('http://fegorsk.ru/index.php/fmeshchkshyafsshnf');
А мне надо проверить результат, не перезагружая страницу. Либо так сказать, где-то хранить эту страницу и следить за ее действиями. Надеюсь, объяснил все ясно. Заранее благодарен!
Цитировать
 
 
0 #10 Максим 15.12.2014 03:06
Цитирую Maxim:
Допишите
IdHTTP1.HandleRedirects:=true;

Можно после этой строки.
IdHTTP1.Request.AcceptCharSet := 'windows-1251';

Большое спасибо, помогло!
Цитировать
 
 
+2 #9 Maxim 14.12.2014 18:54
Допишите
IdHTTP1.HandleRedirects:=true;

Можно после этой строки.
IdHTTP1.Request.AcceptCharSet := 'windows-1251';
Цитировать
 
 
0 #8 Максим 14.12.2014 16:17
Цитирую Maxim:
Цитирую Максим:
При нажатии на кнопку выскакивает ошибочка: "HTTP/1.1 303 See other." Погуглил, самостоятельно исправить ошибку не смог. Использую Delphi 7 из студии XE7. Помогите, кто сможет! Заранее спасибо!

Ошибка при выполнении кода из статьи? Если нет, то на какой адрес отправляете запрос?

Да, ошибка я так понял, выходит при отправке POST-запроса. Код полностью скопировал с сайта. Т.е. прямо из статьи.
Цитировать
 
 
+1 #7 Maxim 14.12.2014 13:18
Цитирую Максим:
При нажатии на кнопку выскакивает ошибочка: "HTTP/1.1 303 See other." Погуглил, самостоятельно исправить ошибку не смог. Использую Delphi 7 из студии XE7. Помогите, кто сможет! Заранее спасибо!

Ошибка при выполнении кода из статьи? Если нет, то на какой адрес отправляете запрос?
Цитировать
 
 
+1 #6 Максим 14.12.2014 12:14
При нажатии на кнопку выскакивает ошибочка: "HTTP/1.1 303 See other." Погуглил, самостоятельно исправить ошибку не смог. Использую Delphi 7 из студии XE7. Помогите, кто сможет! Заранее спасибо!
Цитировать
 
 
+1 #5 Maxim 09.03.2014 22:25
Я доволен.
Цитировать
 
 
+1 #4 Стас 05.03.2014 08:34
:-| Ваш код помог мне подработать. :-|
Цитировать
 
 
-2 #3 Миша 20.09.2013 13:15
Помогите пожалуйста авторизоваться на этом сайте: krasview.ru
Цитировать
 
 
+2 #2 Maxim 28.07.2013 13:02
Пакеты я ловил при помощи расширения для Firefox - Tamper Data. А по поводу последних переменных - то их может и не быть. Всё зависит от того, как реализована регистрация на сайте. Если интерес ещё не остыл, то пришлите мне на почту ссылку на сайт, я по возможности разберусь. Mail можно посмотреть в контактах сайта.
Цитировать
 
 
+2 #1 revaa 27.07.2013 14:59
а какой анализатором вы пользуетесь, чтот у меня не показывает 3 последних переменных. Да и сайт на которую я делаю авторизацию частично написан на жабе типа (/l.jsp?)го. да если можно по потробней объясните я тока начинаю. Сильно не бить :sigh:
Цитировать
 
Monday the 23rd. icq 486350790
Copyright 2012

©