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] Может кто подскажет, где ошибка, или может надо по другому делать.
|
|
| |