Форум: "Сети";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
ВнизПроблемы с логином на сайт(юзая Indy) Найти похожие ветки
← →
papaP © (2006-07-11 00:03) [0]Вобщем к делу:
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
← →
Styx_ (2006-07-11 00:21) [1]Похоже, что при успешном входе Вы получаете пустую страницу, а в хедере переадресацию на другую страницу... А как это обрабатывать в Indy - не знаю.
← →
papaP © (2006-07-11 00:26) [2]А если поставить вопос так - как эито обработать в Delphi(это главное условие)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c