Проблема с авторизацией в твиттере

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by mgn_nikey, 30 Jan 2013.

  1. mgn_nikey

    mgn_nikey New Member

    Joined:
    13 Jan 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Привет форумчане, столкнулся с проблемой, не могу авторизоваться в твиттере через IdHTTP вот код, подскажет кто-нибудь, что не так?
    Code:
    procedure TForm2.Button1Click(Sender: TObject);
    var
    i:integer;
    PostData:TStringList;
    html:WideString;
    auth:string;
    begin
          PostData:=TStringList.Create;
          PostData.Clear;
          PostData.Add('session[username_or_email]=*****');
          PostData.Add('session[password]=******');
          PostData.Add('return_to_ssl=true');
          PostData.Add('scribe_log=');
          PostData.Add('redirect_after_login=/');
          PostData.Add('authenticity_token='+Memo1.Lines[0]);
          html:=IdHTTP1.Post('https://twitter.com/sessions', PostData);
          PostData.Free;
    end;
    
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     WebBrowser1.Navigate('https://twitter.com/');
    end;
    Заранее благодарю
     
    #1 mgn_nikey, 30 Jan 2013
    Last edited: 30 Jan 2013
  2. accounts

    accounts New Member

    Joined:
    16 Oct 2011
    Messages:
    0
    Likes Received:
    4
    Reputations:
    10
    1. Подключите SSL;
    2. При работе с твиттером не надо добавлять порт к хосту, с этим столкнетесь после SSL.
     
  3. mgn_nikey

    mgn_nikey New Member

    Joined:
    13 Jan 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    IdSSLIOHandlerSocketOpenSSL уже был подключен, порт так же не указан, вот что выдает сниффер:
    HTML:
    <html><body>You are being <a href="https://twitter.com/login/error?redirect_after_login=%2F&amp;username_or_email=моя_почта%40yandex.ru">redirected</a>.</body></html>
     
  4. accounts

    accounts New Member

    Joined:
    16 Oct 2011
    Messages:
    0
    Likes Received:
    4
    Reputations:
    10
    Замените две строчки:

    Code:
    PostData.Add('session%5Busername_or_email%5D=*****');
    PostData.Add('session%5Bpassword%5D=******');
    Делаю примерно так (обработчики убраны):

    Code:
    http.wget ('https://twitter.com/', s);
    tokn := parseone (s, 'name="authenticity_token" value="', '"');
    if tokn <> '' then
    begin
      http.post ('https://twitter.com/sessions', 'session%5Busername_or_email%5D=' + http.enco (name) + '&session%5Bpassword%5D=' + http.enco (pass) + '&scribe_log=&redirect_after_login=%2F&authenticity_token=' + tokn, s);
      if pos ('account_activation', http.location) <> 0 then ; // Не валиден
      if pos ('resend_password', http.location) <> 0 then ; // Не валиден
      if pos ('account/locked', http.location) <> 0 then ; // Не валиден
      if pos ('/login/error', http.location) <> 0 then ; // Не валиден
      if pos ('/login/captcha', http.location) <> 0 then ; // Капча
      if http.location = 'https://twitter.com/' then ; // Валиден
    end;
     
    #4 accounts, 31 Jan 2013
    Last edited: 31 Jan 2013
    1 person likes this.
  5. mgn_nikey

    mgn_nikey New Member

    Joined:
    13 Jan 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    parseone что за компонент?
     
  6. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Скорее функция, а не компонент.
     
  7. mgn_nikey

    mgn_nikey New Member

    Joined:
    13 Jan 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Можно эту функцию, пожалуйста? Так же у меня не распознает http.wget и http.enco, что делать?
     
    #7 mgn_nikey, 31 Jan 2013
    Last edited: 31 Jan 2013
  8. accounts

    accounts New Member

    Joined:
    16 Oct 2011
    Messages:
    0
    Likes Received:
    4
    Reputations:
    10
    Code:
    function ParseOne (const Value, Lstring, Rstring : string) : string;
    var
      lpos,
      rpos : integer;
    begin
      result := '';
      lpos := pos (Lstring, Value);
      if lpos > 0 then
      begin
        lpos := lpos + length (Lstring);
        rpos := posex (Rstring, Value, lpos);
        if rpos > 0 then result := copy (Value, lpos, rpos - lpos);
      end;
    end;
    http в моем случае - собственный класс. wget - GET запрос, enco - UrlEncode обычный.
     
  9. mgn_nikey

    mgn_nikey New Member

    Joined:
    13 Jan 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    А что за собственный класс? Мне вместо него что писать? Ответьте в лс я у вас там спросил кое-что.
     
    #9 mgn_nikey, 31 Jan 2013
    Last edited: 31 Jan 2013
  10. mgn_nikey

    mgn_nikey New Member

    Joined:
    13 Jan 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Спасибо, разобрался
     
    #10 mgn_nikey, 7 Feb 2013
    Last edited: 7 Feb 2013