Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с логином на сайт(юзая Indy) [D7, WinXP]


papaP ©   (2006-07-11 00:03:00) 

Вобщем к делу:
function TForm1.GetUrlContent(
url: string;
paramString : String;
useGet : boolean;
): string;
var
Params : TStringStream;
begin
Params := TStringStream.Create('');
IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.40607)';
IdHTTP1.HandleRedirects := true;
if useGet then
begin
Params.WriteString(paramString);
//IdHTTP1.Options('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.40607)');
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP1.Request.Method := hmPost;
IdHTTP1.Post(url,Params);
end;
IdHTTP1.CookieManager.CookieCollection.Add;
result := IdHTTP1.Get(url);
Params.Free;

end;
procedure TForm1.Button1Click(Sender: TObject);
const
Target = 'x(.*)';
Var
LoginParams,viewState : String;
r : TRegExpr;
cook : TCookieCollection;
f: TextFile;
response: TStringList;
i,j : Integer;
p : TStringList;
begin
AssignFile(f,'c:\get.html');
Rewrite(f);
response := TStringList.Create;
r := TRegExpr.Create;
r.Expression := Target;
IdHTTP1.CookieManager := TIdCookieManager.Create(IdHTTP1);
IdHTTP1.CookieManager.CookieCollection.Create(IdHTTP1);
viewState :='dDwyMTQxMjc4NDIxO3Q8O2w8aTwyPjs%2bO2w8dDw7bDxpPDA%'; //ExtractViewState(TIdURI.URLDecode(GetUrlContent(' http://www.gotdotnet.ru/','',false,cook)));
viewState := viewState + '2bOz47bDx0PDtsPGk8NT47aTw2Pjs%2bO2w8d';
viewState := viewState + 'DxwPHA8bDxWaXNpYmxlOz47bDxvPGY%2bOz4%';
viewState := viewState + '2bOz47Oz47dDw7bDxpPDA%2bOz47bDx0PDtsP';
viewState := viewState + 'Gk8MD47PjtsPHQ8O2w8aTwwPjs%2bO2w8dDxw';
viewState := viewState + 'PHA8bDxUb3RhbFJlY29yZHM7PjtsPGk8MTU%2';
viewState := viewState + 'bOz4%2bOz47Oz47Pj47Pj47Pj47Pj47Pj47Pj';
viewState := viewState + '47bDxfY3RsMDpfY3RsMDpfY3RsMDpjaGtQZXJzaXN0Oz4%2bNTsm5BIbhJvxe8DdM%2bvt6Kl0dvg%3d';
if r.Exec(TIdURI.URLEncode(' http://www.gotdotnet.ru/default.aspxpapaP')) then
LoginParams := '_ctl0:_ctl0:_ctl0:txtUsername='+ r.Match[1]+'&';
if r.Exec(TIdURI.URLEncode(' http://www.gotdotnet.ru/default.aspxXXXXXX')) then
LoginParams := LoginParams + '_ctl0:_ctl0:_ctl0:txtPassword='+ r.Match[1]+'&';
LoginParams := LoginParams +'__VIEWSTATE='+ viewState +'&';
if r.Exec(TIdURI.URLEncode(' http://www.gotdotnet.ru/default.aspxВход')) then
LoginParams := LoginParams + '_ctl0:_ctl0:_ctl0:btnLogin='+ r.Match[1];
response.Text := GetUrlContent(' http://www.gotdotnet.ru/',LoginParams,true,cook);
response.SaveToFile('c:\get.htm');
CloseFile(f);
r.Free;
end;
Получается следующая картина:
-- когда я убираю. строку LoginParams := LoginParams + '_ctl0:_ctl0:_ctl0:btnLogin='+ r.Match[1]; — т.е. программное нажатие на кнопку "вход", то на выходе получаю страничку с заполненным полем логин пароль => вьюстейт работает правильно.
Во т, вопрос остается такой, в .Net передаю следующие параметры для нажатия кнопки — name_кнопки=value_кнопки , может при использовании инди надо по другому передавать?(хотя врядли), а может проблемы с кодировкой?? Перепробовал URLEncode и брал строку, получаемую после перекодировки, юзая .Net все рано astream — пустой!Хелп, Плиз
Да и еще, когда ввожу НЕВЕРНЫЙ пароль, то возвращает страницу, с красным(типа неправильным) полем пароль!! То есть когда пароль правильный — возвращает куки? и их надо подставить и сделать ГЕТ? Делаю, ничего не выходит... Надеюсь на ВАшу помощь, хотя и сам неплошаю))
Аналогичный код работает под .Net


papaP   (2006-07-11 00:26:00) [1]

А если поставить вопос так - как эито обработать в Delphi(это главное условие)


Styx_   (2006-07-11 00:21:00) [2]

Похоже, что при успешном входе Вы получаете пустую страницу, а в хедере переадресацию на другую страницу... А как это обрабатывать в Indy - не знаю.


Наверх

Титульная страница Поиск, карта сайта Написать письмо