Авторизация в Instagram[Помощь]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by repost, 19 Apr 2013.

  1. repost

    repost New Member

    Joined:
    6 Jan 2013
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Помогите пожалуйста авторизация в instagrame на Delphi.Не авторизируется.В чём может быть проблема?

    PHP:
    function extract(const textbegin1end1string): string;
    var
      
    startposendposinteger;
    begin
      result 
    := '';
      
    startpos := Pos(begin1text);
      if 
    startpos 1 then
        
    exit;
      
    inc(startposlength(begin1));
      
    endpos := PosEx(end1textstartpos);
      if 
    endpos 1 then
        
    exit;
      
    result := Copy(textstartposendpos startpos);
    end;


    procedure TForm3.Button1Click(SenderTObject);
    var
     
    auth:tstringlist;
     
    bufer:string;
     
    token,StrPagestring;
    begin
     auth
    :=tstringlist.Create;
     
    auth.Add('username='+edit1.Text);
     
    auth.Add('password='+edit2.Text);
     
    token := extract(StrPage'name="token" value="''"');
     
    bufer:=idhttp1.Post('https://instagram.com/accounts/login/csrfmiddlewaretoken='+token+'&username='+Edit1.Text+'&password='+Edit2.Text+'',auth);
     if 
    pos('Добро пожаловать',bufer)>0 then
    label1
    .caption:='ОК'
     
    else label1.caption:='error';


    end;
     
  2. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    С чего ты взял, что запрос идёт на https://instagram.com/accounts/login/csrfmiddlewaretoken='+token+'&username='+Edit1.Text+'&password='+Edit2.Text ?
     
  3. repost

    repost New Member

    Joined:
    6 Jan 2013
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    через сниффер посмотрел
     
  4. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Еще раз посмотри
     
  5. repost

    repost New Member

    Joined:
    6 Jan 2013
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Вот

    PHP:
    POST /accounts/loginHTTP/1.1 Hostinstagram.com 

    User
    -AgentMozilla/5.0 (Windows NT 6.1rv:20.0Gecko/20100101

     Firefox
    /20.0 Accepttext/html,application/xhtml+xml,application

    /xml;q=0.9,*/*;q=0.8 Accept-Language: ru-RU,ru;q=0.8,en-

    US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: 

    https://instagram.com/accounts/login/ Cookie: 

    mid=UWGyRP__AAHf9jXlWfxJgt5xaYSO; 

    __utma=1.918553205.1365357132.1366383770.1366479720.8;

     __utmz=1.1365357132.1.1.utmcsr=yandex|utmccn=

    (organic)|utmcmd=organic|utmctr=instagram; 


    __qca=P0-1252337310-1365357172415; sessionid=IGSC06a17d0843eb95c01eb6a15d09cc5aacac5b869f56d08c2d3169cffdcbf50e63%3AfGOlvR8L6QHzhjvv7v9ZnzCY2ZvAFaJs
    %3A%7B%7D; ccode=BY; __utmb=1.4.10.1366479720; __utmc=1; csrftoken=42d5b3fd047483bdc4708eba6651a698 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 89  

    csrfmiddlewaretoken=42d5b3fd047483b08eba6651a698&

    username=bigsig&password=passs1
     
  6. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    И какой из этого нужно сделать вывод?
     
    1 person likes this.
  7. repost

    repost New Member

    Joined:
    6 Jan 2013
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Изменил авторизация всё равно не авторизируется
    var
    p:Tstrings;
    i:string;
    begin
    p.Add('username='+Edit1.Text);
    p.Add('password='+Edit2.Text);
    i:=IdHTTP1.Post('https://instagram.com/accounts/login/', p);
    if pos('logout', i) <> 0 then
    ShowMessage('Успешно')
    else
    ShowMessage('Не успешно');
    end;
     
  8. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Куда токен пропал?
    Неужели так сложно научиться пользоваться снифером
     
  9. repost

    repost New Member

    Joined:
    6 Jan 2013
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    токен потом,с начало надо сделать запрос для получения кук.
     
  10. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    [​IMG]

    Могу только посоветовать начать с чего-нибудь более простого. Работать с сетью у тебя, судя по всему, еще не получается
     
  11. repost

    repost New Member

    Joined:
    6 Jan 2013
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    У МЕНЯ ВЫШЛО ВОТ ТАК

    procedure TForm3.Button1Click(Sender: TObject);
    var
    p:Tstrings;
    i,token,srt:string;
    StrPage: string;
    begin
    p:=Tstringlist.Create;
    idhttp1.get('http://instagram.com');
    p.Add('username='+Edit1.Text);
    p.Add('password='+Edit2.Text);
    IdHTTP1.CookieManager:=IdCookieManager1;
    Idhttp1.AllowCookies := true;
    Idhttp1.HandleRedirects := true;
    token:= extract(StrPage, 'name="token" value="', '"');
    i:=IdHTTP1.Post('https://instagram.com/accounts/login/', p);
    if pos('logout', i) <> 0 then
    ShowMessage('Успешно')
    else
    ShowMessage('Не успешно');
    end;
    ОШИБКА ПОЯВЛЯЕТСЯ :http/ 1.1 403 forbidder
     
  12. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Токен достал, но в запрос так и не вставил.
    Полная бредятина
     
    #12 fuckyoupig, 25 Apr 2013
    Last edited: 25 Apr 2013
  13. Diamantx

    Diamantx New Member

    Joined:
    17 Feb 2012
    Messages:
    64
    Likes Received:
    1
    Reputations:
    0
    Вот рабочий код авторизации:

    Code:
    procedure TMyThread.Execute;
    var
      IdHTTP: TidHTTP;
      auth: TStringList;
      login,password,home,token:string;
    
    begin
      // Здесь описывается код, который будет выполняться в потоке
      login:=form1.username.text;
      password:=form1.password.text;
      IdHTTP := TidHTTP.Create(nil);
      IdHTTP.IOHandler := Form1.IdSSLIOHandlerSocketOpenSSL1;
      token := IdHTTP.Get('https://instagram.com/accounts/login/');
      token := copy(token, AnsiPos('csrf_token = ', token) + 14, 32);
    
      try
        auth := TStringList.Create;
        auth.Add('csrfmiddlewaretoken=' + token);
        auth.Add('username=' + Form1.username.text);
        auth.Add('password=' + Form1.password.text);
        IdHTTP.Request.CustomHeaders.AddValue('Accept-Language', 'ru-RU');
        IdHTTP.Request.CustomHeaders.AddValue('Referer',
          'https://instagram.com/accounts/login/');
        IdHTTP.post('https://instagram.com/accounts/login/', auth);
    	
      except
      end;
      home := IdHTTP.Get('http://instagram.com');
    
      if pos('hl-en not-logged-in', home) = 0 then showmessage('Вход выполнен') else showmessage('Ошибка авторизации');
      end;
    Перед этим положить на форму IdSSLIOHandlerSocketOpenSSL
     
  14. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Diamantx, взял и всё испортил :(
     
  15. Diamantx

    Diamantx New Member

    Joined:
    17 Feb 2012
    Messages:
    64
    Likes Received:
    1
    Reputations:
    0
    Зачем мучить человека? :rolleyes:

    У меня, например, вот тоже засада: не могу провести аутентификацию в приложении в инстраграме. Может кто знает?
     
  16. fuckyoupig

    fuckyoupig Member

    Joined:
    1 Mar 2011
    Messages:
    0
    Likes Received:
    11
    Reputations:
    2
    Суть была не замучить, а научить пользоваться своей головой
     
  17. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Вот: подтверждает максимальные разрешения для приложения, и логинтся.
    Выдрал из класса для работы с инстаграммом. Так что если чего не хватает - догадаешься :)
    например FHTTP - TidHTTP ну и т.д.
    Code:
    //Логинится через токен приложения
    function TInstagramm.Auth(LoginString:string;OAuth_token:string):Boolean;
    var s:TStringStream;
        res,middlewaretoken:string;
        han:Boolean;
        Data:TStringList;
        uri:TIdURI;
    begin
      Result:=False;
      s:=TStringStream.Create('');
      Data:=TStringList.Create;
      uri:=TIdURI.Create('https://instagram.com');
      try
        han:=FHTTP.HandleRedirects;
        FHTTP.HandleRedirects:=True;
        FHTTP.Request.Referer:='https://instagram.com/accounts/login/?next=/oauth/authorize/%3Fclient_id%3D'+OAuth_Token+'%26redirect_uri%3Dhttp%3A//vk.com%26response_type%3Dtoken%26scope%3Drelationships';
        s.Size:=0;
        try
          FHTTP.Get('https://api.instagram.com/oauth/authorize/?client_id='+OAuth_token+'&redirect_uri='+'http://vk.com'+'&response_type=token&scope=relationships+likes+comments',s);
        except
        end;
        res:=s.DataString;
        middlewaretoken:=Pars('<input type="hidden" name="csrfmiddlewaretoken" value="',res,'"');
        Data.Add('csrfmiddlewaretoken='+middlewaretoken);
        Data.Add('username='+Trim(Copy(LoginString,1,Pos(':',LoginString)-1)));
        Data.Add('password='+Trim(Copy(LoginString,Pos(':',LoginString)+1,Length(LoginString))));
        s.Size:=0;
        FHTTP.HandleRedirects:=False;
        try
          FHTTP.Post('https://instagram.com'+Pars('<form method="POST" id="login-form" class="adjacent" action="',res,'"'),Data,s);
        except
          on E:EIdHTTPProtocolException do
          begin
            if (E.ErrorCode=302)and(Pos('access_token=',FHTTP.Response.Location)>0) then
            begin
              key:=Pars('access_token=',FHTTP.Response.Location,'');
              Result:=True;
              Exit;
            end
            else
            if (e.ErrorCode=302) then
            try
              FHTTP.HandleRedirects:=True;
              try
                FHTTP.Get(FHTTP.Response.Location,s);
              except
              end;
            finally
              FHTTP.HandleRedirects:=False;
            end;
          end;
          on E:Exception do;
        end;
        res:=s.DataString;
        Data.Clear;
        Data.Add('csrfmiddlewaretoken='+middlewaretoken);
        Data.Add('allow=Authorize');
        try
          FHTTP.Post('https://instagram.com/oauth/authorize/?client_id='+OAuth_Token+'&redirect_uri=http://vk.com&response_type=token&scope=relationships+likes+comments',Data,s);
        except
          on E:EIdHTTPProtocolException do
          begin
            if (E.ErrorCode=302)and(Pos('access_token=',FHTTP.Response.Location)>0) then
            begin
              key:=Pars('access_token=',FHTTP.Response.Location,'');
              Result:=True;
              Exit;
            end
            else
            if (e.ErrorCode=302) then
            try
              FHTTP.Get(FHTTP.Response.Location,s);
            except
            end;
          end;
          on E:Exception do;
        end;
      finally
        FHTTP.HandleRedirects:=han;
        Data.Free;
        uri.Free;
        s.Free;
      end;
    end;
     
    #17 xophet, 27 Apr 2013
    Last edited: 27 Apr 2013
  18. Diamantx

    Diamantx New Member

    Joined:
    17 Feb 2012
    Messages:
    64
    Likes Received:
    1
    Reputations:
    0
    Благодарю. Еще в оф. API сказано, что для обращения к нему нужен какой-то Access-токен.

    [​IMG]

    Но какой именно?

    [​IMG]
     
  19. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Т.е. ту ф-ию, которую я скинул тебе даже лень было просмотреть?
    вот же оно: key:=Pars('access_token=',FHTTP.Response.Location,'');
     
  20. Diamantx

    Diamantx New Member

    Joined:
    17 Feb 2012
    Messages:
    64
    Likes Received:
    1
    Reputations:
    0
    Все, увидел :)
    Я просто особо в код не вдавался, просто взял то, что мне надо