Авторизация на одноклассниках [Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Artist, 30 Jul 2010.

  1. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Написал код для авторизации в ОД. Но при попытке зайти кидает снова на страницу авторизации. Нужна помощь, может что-то не доделал?

    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 Artist, 30 Jul 2010
    Last edited: 31 Jul 2010
  2. edzi

    edzi New Member

    Joined:
    26 Jun 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    А зачем 2 TstringList? "a" понятно, а "b" тут в принципе и не нужен. не b:string; должен быть то?
     
  3. Pyhin

    Pyhin Member

    Joined:
    25 Oct 2008
    Messages:
    1
    Likes Received:
    32
    Reputations:
    0
    Для авторизации на ОД:

    1. Грузишь страницу odnoklassniki.ru.
    2. Парсишь с этой страницы url хоста вида http://wg256.odnoklassniki.ru/
    3. Делаешь ПОСТ на спарсенное url
     
  4. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Я обычно использую стринглист, но это не имеет не какого отношения к вопросу..

    А я по твоему что делаю?
     
  5. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Referer укажи
     
  6. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Не помагает...
     
  7. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    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;
     
  8. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Так этот код есть в интернет и не работает, я точно также делаю в своем коде...
     
  9. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Артист, посмотри личку
     
  10. Pyhin

    Pyhin Member

    Joined:
    25 Oct 2008
    Messages:
    1
    Likes Received:
    32
    Reputations:
    0
    Делал через инди авторизацию на тфайл.ру, тоже кидало на главную проблема была в куках которые инди не устанавливала после редиректа, вопрос решил следующим образом, попробуй так же:



    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;