| 
| acer | Дата: Четверг, 29.03.2012, 18:50 | Сообщение # 1 |  |   Ранг 1 Группа: Пользователи Сообщений: 1 Награды: 0 Репутация: 0 Статус: Offline | Здравствуйте, мне необходимо, чтобы программа автоматически авторизировалась на сайте, на странице http://login.shodennik.ua/defult.aspx, тоесть передавала такую строку:'xss=45f528ba21&name=kasyanov_igor%40inbox.ru&pass=mypass&login=%D0%A3%D0%B2%D1%96%D0%B9%D1%82%D0%B8'
 сначало, я попробовал использовать элементы indy misc
 [DELPHI]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:='login.shodennik.ua';
 Http.Request.UserAgent:='Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
 Http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
 Http.Request.AcceptLanguage:='ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
 Http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
 Http.Request.Referer:='http://shodennik.ua/';
 // Http.Request.acceptEncoding:='gzip, deflate';
 
 Data.Add('xss=45f528ba21');
 Data.Add('name=kasyanov_igor%40inbox.ru');
 Data.Add('pass=mypass');
 Data.Add('login=%D0%A3%D0%B2%D1%96%D0%B9%D1%82%D0%B8');
 StrPage := Http.post('http://www.login.shodennik.ua/default.aspx', 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;[/DELPHI]
 но в таком случае при нажатии кнопки появляеться ошибка "socket error # 110004"
 потом я попробовал использовать библиотеку synapse:
 [DELPHI]procedure TForm1.Button1Click(Sender: TObject);
 var Data: TStringStream;
 HTTPSend: THTTPSend;
 StrPage,s:string;
 n,x:integer;
 _URL, Flags, TargetFrameName, PostData, Headers: Olevariant;
 begin
 HTTPSend:=THTTPSend.Create;
 HTTPSend.KeepAlive:=true;
 HTTPSend.KeepAliveTimeout:=300;
 HTTPSend.TargetHost:='login.shodennik.ua';
 HTTPSend.TargetPort:='80';
 HTTPSend.Protocol:='1.1';
 HTTPSend.MimeType:='application/x-www-form-urlencoded';
 Data:=TStringStream.Create('');
 Data.WriteString('xss=45f528ba21&'+'&');
 Data.WriteString('name=kasyanov_igor%40inbox.ru&'+'&');
 Data.WriteString('pass=mypass&'+'&');
 Data.WriteString('login=%D0%A3%D0%B2%D1%96%D0%B9%D1%82%D0%B8');
 //data.WriteString('xss=45f528ba21&name=kasyanov_igor%40inbox.ru&pass=degustator&login=%D0%A3%D0%B2%D1%96%D0%B9%D1%82%D0%B8');
 //авторизуемся на сайте
 HTTPSend.Document.LoadFromStream(Data);
 //showmessage(data.DataString);
 HTTPSend.HTTPMethod(data.DataString,'http://www.login.shodennik.ua/default.aspx');
 
 {//очищаем заголовки и тело документа
 HTTPSend.Document.Clear;
 HTTPSend.Headers.Clear;
 
 {анализируем ответ сервера}
 
 idHttp1.CookieManager := IdCookieManager1;
 HttpGetText('http://shodennik.ua', Memo1.Lines);
 if pos('pageAuth',memo1.text)<>0 then showmessage('ok');
 if pos('pageAnonym',memo1.text)<>0 then showmessage('no');
 end;
 
 [/DELPHI]
 в таком случае на сайт данные отправляються вроде верно, но при проверке (я загружаю страницу shodennik.ua) загружаеться страница не авторизированного пользователя, может не правильно проверяю.
 Также пробовал использовать элемент iehttp, но сайт при этом также возвращает страницу неавторизированного пользователя:
 [DELPHI]
 procedure TForm1.BitBtn1Click(Sender: TObject);
 var iehttp1: TIEHTTP;
 begin
 iehttp1 := TIEHTTP.Create(nil);
 
 iehttp1.username := 'kasyanov_igor%40inbox.ru';
 iehttp1.password := 'mypass';
 
 iehttp1.ExecuteURL('http://login.shodennik.ua/default.aspx');
 
 showmessage(iehttp1.sl.text);
 end;
 [/DELPHI]
 Может кто подскажет, где ошибка, или может надо по другому делать.
 |  |  |  |  |