Привет форумчане, столкнулся с проблемой, не могу авторизоваться в твиттере через 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. Подключите SSL; 2. При работе с твиттером не надо добавлять порт к хосту, с этим столкнетесь после SSL.
IdSSLIOHandlerSocketOpenSSL уже был подключен, порт так же не указан, вот что выдает сниффер: HTML: <html><body>You are being <a href="https://twitter.com/login/error?redirect_after_login=%2F&username_or_email=моя_почта%40yandex.ru">redirected</a>.</body></html>
Замените две строчки: 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;
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 обычный.