Помощь с авторизацией (Delphi)

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

  1. u4iteor

    u4iteor Member

    Joined:
    14 Feb 2010
    Messages:
    0
    Likes Received:
    8
    Reputations:
    0
    Есть код:
    Но даже при верном емайл/пароль пишет
    Авторизация не удалась​

    Что в коде не так?=(
     
  2. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    Попробуй таким способом, мне помогло)))
    PageProfile:=IdHTTP1.Get('http://vkontakte.ru/login.php?email='+URLDecode(loginVKONT.Text)+'&pass='+URLDecode(passwordVKONT.Text));
     
  3. u4iteor

    u4iteor Member

    Joined:
    14 Feb 2010
    Messages:
    0
    Likes Received:
    8
    Reputations:
    0
    Но теперь ошибка:
    undeclared identifier 'urldecode'
     
  4. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    сорри, функцию забыл)
    вставь ее в свой проект:

    Code:
    function URLDecode(const S: string): string;
    var
    i, idx, len, n_coded: Integer;
    function WebHexToInt(HexChar: Char): Integer;
    begin
    if HexChar < '0' then
    Result := Ord(HexChar) + 256 - Ord('0')
    else if HexChar <= Chr(Ord('A') - 1) then
    Result := Ord(HexChar) - Ord('0')
    else if HexChar <= Chr(Ord('a') - 1) then
    Result := Ord(HexChar) - Ord('A') + 10
    else
    Result := Ord(HexChar) - Ord('a') + 10;
    end;
    begin
    len := 0;
    n_coded := 0;
    for i := 1 to Length(S) do
    if n_coded >= 1 then
    begin
    n_coded := n_coded + 1;
    if n_coded >= 3 then
    n_coded := 0;
    end
    else
    begin
    len := len + 1;
    if S[i] = '%' then
    n_coded := 1;
    end;
    SetLength(Result, len);
    idx := 0;
    n_coded := 0;
    for i := 1 to Length(S) do
    if n_coded >= 1 then
    begin
    n_coded := n_coded + 1;
    if n_coded >= 3 then
    begin
    Result[idx] := Chr((WebHexToInt(S[i - 1]) * 16 +
    WebHexToInt(S[i])) mod 256);
    n_coded := 0;
    end;
    end
    else
    begin
    idx := idx + 1;
    if S[i] = '%' then
    n_coded := 1;
    if S[i] = '+' then
    Result[idx] := ' '
    else
    Result[idx] := S[i];
    end;
    end; // URLDecode
    
     
  5. u4iteor

    u4iteor Member

    Joined:
    14 Feb 2010
    Messages:
    0
    Likes Received:
    8
    Reputations:
    0

    Но все равно "авторизация не удалась!"=(
     
  6. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    Ты зачем ф-ию в обработчик запихал???
    Ее нужно отдельно вставить после строки {$R *.dfm} )))
     
  7. u4iteor

    u4iteor Member

    Joined:
    14 Feb 2010
    Messages:
    0
    Likes Received:
    8
    Reputations:
    0
    упс=) Не увидел-)
     
  8. u4iteor

    u4iteor Member

    Joined:
    14 Feb 2010
    Messages:
    0
    Likes Received:
    8
    Reputations:
    0
    Все равно не работает... Как еще можно написать авторизацию Вконтакте с: "Авторизация удалась" и "Авторизация не удалась"
     
  9. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    да и вообще там данные передаются через POST
    POST /login.php HTTP/1.1
    POST /?act=login HTTP/1.1
    а потом
    GET /login.php?m=1&email=assd HTTP/1.1
    Возьми снифер, и посмотри, как идут запросы к серверу
     
  10. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Не обязательно. Можно одним запросом, это уже обсуждалось не раз.
    ТС, напиши пароль, который ты вводишь
     
  11. yMa.hacKer

    yMa.hacKer New Member

    Joined:
    14 May 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    d:tstringlist; PP,s:string; error:boolean;
    	begin
    IdHTTP1.AllowCookies:=true;
    IdHTTP1.HandleRedirects:=false;
    	 d:=tstringlist.create;
    	 d.Add('email='+Edit1.Text);
    	 d.Add('pass='+Edit2.Text);
    	 d.Add('expire=');
    	 d.Add('vk=');
       error:=false;
    try
    	  PP:=IdHTTP1.Post('http://login.vk.com/?act=login', d);
        s:=('s='+Copy(PP, Pos('value', PP)+7, 56));
    except
    	  error:=true;
    end;
    
    	 if not(error) then
    	  begin
    	   d.Clear;
    	   d.Add('s='+Copy(PP, Pos('value', PP)+7, 56));
         s:=(Copy(PP, Pos('value', PP)+7, 56));
    	   d.Add('op=slogin');
    	   d.Add('redirect=1');
    	   d.Add('expire=0');
    	   d.Add('to=');
    	   IdHTTP1.HandleRedirects:=true;
    	   try
    	    PP:=IdHTTP1.Post('http://vkontakte.ru/login.php', d);
           ShowMessage('Авторизация прошла успешно.');
    	   except
    	   end;
       end
    	 else
    	  ShowMessage('Авторизация не удалась!');
     d.Free;
    	end;
    
    Исходник, если нужен _http://slil.ru/29483336