Пример авторизации на сайте с помощью idHTTP.Post - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Alowir, Sanoxxx  
Пример авторизации на сайте с помощью idHTTP.Post
Kudyashov Дата: Понедельник, 10.11.2014, 12:28 | Сообщение # 1
C# dev.
Сообщений: 3
Статус: Offline
Пример авторизации на сайте с помощью idHTTP.Post


Сегодня расскажем, о том как использовать idHTTP.Post для авторизации на сайте. Возьмём для примера сайт LiveJournal.com.

Немного теории для начинающих. Итак, вызов метода Post компонента idHTTP отличается от вызова Get-а только тем, что помимо URL-а необходимо передать параметры. Параметры можно передавать в виде StringList-а, или каких-нибудь Stream-ов, или чего-нибудь еще подходящего.)

Пример Post-процедуры (параметры передаются в виде StringList-а):
Код
procedure TForm1.Button1Click(Sender: TObject);
var
     LoginInfo: TStringList;
     Response: TStringStream;
begin
     try
       LoginInfo := TStringList.Create;
       Response := TStringStream.Create('');
       LoginInfo.Add('username=MyName');
       LoginInfo.Add('password=MyPass');
       IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response);
       Showmessage(Response.DataString);
     finally
       begin
         Response.Free;
         LoginInfo.Free;
       end;
     end;
end;


Пример Post-функции (параметры передаются в виде IdMultiPartFormDataStream-а):
Код
uses IdMultipartFormData;
{ .... }

procedure TForm1.Button1Click(Sender: TObject);
var
     data: TIdMultiPartFormDataStream;
begin
     data := TIdMultiPartFormDataStream.Create;
     try
       // добавляем нужные параметры
       data.AddFormField('param1', 'value1');
       data.AddFormField('param2', 'value2');
       // для примера выводим в мемо все, что вернулось
       Memo1.Lines.Text := IdHTTP1.Post('http://localhost/script.php', data);
     finally
       data.Free;
     end;
end;

Сейчас попробуем применить полученные знания. Идем на LiveJournal.com, включаем сниффер, логинимся на сайте и смотрим, какие параметры надо передавать ('mode=login', 'user=логин', 'password=пароль'). Авторизация не произойдет, если на стороне клиента не будут сохранены кукисы. Для сохранения кукисов среди компонентов Indy существует TidCookieManager. IdCookieManager подключается к idHTTP через свойство CookieManager.
Код
idHttp.CookieManager := IdCookieManager;


В этом случае при запросах в заголовок добавляются кукисы, автоматически сохраненные в IdCookieManager. IdCookieManager можно найти на закладке Indy Misc или создать динамически.

Поместим на форму 2 TEdit-а, TMemo и кнопку, на которую повесим следующий работающий код авторизации:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
     Http  : TidHttp;
     CM    : TidCookieManager;
     Data  : TStringList;
     StrPage, UserID,  UserName  :  String;
     i : integer;
begin
     try
       Http := TIdHTTP.Create(Self);
       Data := TStringList.Create;
       CM := TidCookieManager.Create(Http);
       Http.AllowCookies := true;
       Http.CookieManager := CM;
       Http.HandleRedirects := true;

       Http.Request.Host:='livejournal.com';
       Http.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10';
       Http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
       Http.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3';
       Http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
       Http.Request.Referer:='http://www.livejournal.com/';

       Data.Add('mode=login');
       Data.Add('user=' + Edit1.Text);
       Data.Add('password=' + Edit2.Text);
       StrPage := Http.Post('http://www.livejournal.com/login.bml?ret=1', Data);
     finally
       Data.Free;
       CM.Free;
       Http.Free;
     end;

     if Pos('<input class="logoutlj_hidden" id="user" name="user" type="hidden" value="'+Edit1.Text,StrPage) <> 0 then
       ShowMessage('Авторизация прошла успешно')
     else
       ShowMessage('Авторизация провалилась');

     Memo1.Lines.Text := StrPage;
end;

Возвращенные заголовки (после ответа сервера) можно посмотреть так:
Код
idHttp.Response.RawHeaders.GetText;

Сохраненные в CookieManager-е кукисы можно посмотреть так:
Код
for i := 0 to Http.CookieManager.CookieCollection.Count - 1 do
     StrPage := StrPage + CM.CookieCollection.Items[i].CookieText + #13#10;


C#, C++

Сообщение отредактировал Kudyashov - Понедельник, 10.11.2014, 12:32
M83 Дата: Вторник, 30.12.2014, 18:37 | Сообщение # 2
Боец
Сообщений: 83
Статус: Offline
Спасибо + твой.

100 % man!
-RamZess[CM]- Дата: Понедельник, 16.03.2015, 10:52 | Сообщение # 3
7498532
Сообщений: 287
Статус: Offline
Дай скайп или VK,помощь твоя нужна
mkrass Дата: Среда, 25.03.2015, 16:08 | Сообщение # 4
Мишаня
Сообщений: 491
Статус: Offline
Для создания сайтов очень хорошо будет

Помогаю новичкам в develstudio , с++ ,pascal . Пишите в лс.Так же приму в дар пустышки 3+ лвл для читерства.
Cheater CM: 07.03.15 - 08.07.16
Мой скайп - cm.mkrass
Surex Дата: Суббота, 02.07.2016, 14:09 | Сообщение # 5
Боец
Сообщений: 137
Статус: Offline
Спасибо бро

  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума