Пятница, 26.04.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Сеть-интернет » Разные

Пример авторизации на сайте с помощью 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;

Получить ссылку на материал

Категория: Разные | Добавил: Барон (20.12.2011)
Просмотров: 11061 | Теги: idHTTP.Post, Сайт, Авторизация | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Web-приложения [6]
Почта [12]
Работа с HTTP [4]
Робота с XML [4]
Сервер [3]
Разные [50]
Королевство Delphi © 2010-2024
Яндекс цитирования