Написал код для авторизации в ОД. Но при попытке зайти кидает снова на страницу авторизации. Нужна помощь, может что-то не доделал? Code: a:=TStringList.Create; b:=TStringList.Create; b.Text:=idhttp1.Get('http://odnoklassniki.ru/'); t:=pos('"panelBox_body"><form action="',b.Text)+30; k:=pos('" method="post"><input value=""',b.Text); l:=k-t; j:=copy(b.Text,t,l); ji:=copy(j,1,49); ki:=copy(j,54,19); hi:=j; Delete(hi,1,76); ssilka:=ji+ki+hi; a.Clear; b.Clear; a.Add('st.posted=set'); a.Add('st.email='+Edit1.Text); a.Add('st.password='+Edit2.Text); //a.Add('st.fJS=enabled'); //a.Add('st.screenSize=1366 x 768'); //a.Add('st.flashVer=10.1.53'); a.Add('button_go=Войти'); b.Text:=IdHTTP1.Post(ssilka,a); Memo1.Text:=b.Text; Отправляется запрос в точности как и в браузере но в Мемо1 должен вернутся пустой текст...
Для авторизации на ОД: 1. Грузишь страницу odnoklassniki.ru. 2. Парсишь с этой страницы url хоста вида http://wg256.odnoklassniki.ru/ 3. Делаешь ПОСТ на спарсенное url
Я обычно использую стринглист, но это не имеет не какого отношения к вопросу.. А я по твоему что делаю?
Code: procedure TForm1.Button1Click(Sender: TObject); var StrPage, ssylka:string; Data:TstringList; begin idhttp1.HandleRedirects:=true; StrPage:=idhttp1.Get('http://odnoklassniki.ru/'); ssylka:=Pars('<form action="',StrPage,'"'); Data:=TstringList.Create; Data.Add('st.posted=set'); Data.Add('st.email='+Edit1.Text); Data.Add('st.password='+Edit2.Text); Data.Add('button_go=Войти'); StrPage:=idhttp1.Post(ssylka, Data); if Pos('Logoff', StrPage)<>0 then Label3.Caption:='Залогинились' else Label3.Caption:='Не залогинились'; Data.Free; end; function TForm1.Pars(T_, ForS, _T: string): string; var a, b: integer; begin Result := ''; if (T_ = '') or (ForS = '') or (_T = '') then Exit; a := Pos(T_, ForS); if a = 0 then Exit else a := a + Length(T_); ForS := Copy(ForS, a, Length(ForS) - a + 1); b := Pos(_T, ForS); if b > 0 then Result := Copy(ForS, 1, b - 1); end;
Делал через инди авторизацию на тфайл.ру, тоже кидало на главную проблема была в куках которые инди не устанавливала после редиректа, вопрос решил следующим образом, попробуй так же: HTML: var Http: TIdHTTP; cook: TIdCookieManager; Data: TStringList; html_cod, cookie1, cookie2, header: String; file1: textfile; begin try Http := TIdHTTP.Create(self); cook := TIDCookieManager.Create(Http); data := TStringList.Create; Http.CookieManager := cook; Http.AllowCookies := true; Http.HandleRedirects := false; Http.Request.Host := 'tfile.ru'; Http.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6'; 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://tfile.ru/login/'; Http.Request.Connection := 'keep-alive'; Http.Request.ContentType := 'application/x-www-form-urlencoded'; Data.Add('referer=http://tfile.ru/'); Data.add('username='+Edit1.Text); Data.add('password='+Edit2.text); try html_cod := http.post('http://tfile.ru/login/', data); except end; header := http.Response.RawHeaders.Text; Delete(header, 1, pos('Set-Cookie: ', header)+11); cookie1 := copy(header, 1, pos('Set-Cookie: ', header) -2); Delete(header, 1, pos('Set-Cookie: ', header)+11); cookie2:= header; http.Request.CustomHeaders.Text:='Cookie: '+cookie1 +#10#13+cookie2; html_cod := http.get('http://tfile.ru/'); finally Data.free; http.Free; end; if pos('logout', html_cod)> 0 then Edit3.Text := 'Авторизация прошла успешно!' else Edit3.Text := 'Авторизация не удалась!'; end;