To nie wiem, jeżeli logowałeś się prawidłowo to powinieneś uzyskac Token, o ile przy logowaniu nie masz wspomnianej informacji o potrzebie potwierdzenia zmiany IP. Pokaże na szybko kod do logowania jaki u siebie używam w wątku, oczywiście z wykorzystaniem Synapse i dllek do HTTPS:
//...
const
Redir_C = 'Location: ';
Base_Url = 'https:'#47#47'www.facebook.com/';
Graph_Url_SSL = 'https:'#47#47'graph.facebook.com/';
Default_MimeType = 'application/x-www-form-urlencoded';
Opera_UserAgent = 'Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.12.388 Version/12.11';
function TMainForm.Logon(UserEmail, UserPassword : string) : boolean;
const
Developers_Url = 'http:'#47#47'developers.facebook.com';
Tools_Path_Friends = '/tools/explorer?method=GET&path=me/friends';
ACharset_Test = '%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84';
Error_Text0 = 'Za często próbujesz. Spróbuj ponownie później.';
Error_Text1 = 'Nieprawidłowy adres e-mail';
Error_Text2 = 'Nieprawidłowa nazwa użytkownika';
Error_Text3 = 'Wprowadzone hasło jest nieprawidłowe';
Error_Text4 = 'Wykryto wielokrotne próby zalogowania się do Twojego konta';
Error_Text5 = 'Zaktualizuj informacje dotyczące bezpieczeństwa';
Error_Text6 = 'Aby wyświetlić tę stronę, musisz się zalogować';
var
I, RedirPos : integer;
LgnRndStr, LsdStr, RedirUrl : string;
begin
Result := False;
with SynHttp do
begin
Cookies.Clear;
Headers.Clear;
Document.Clear;
UpdateCurrentStepGBCaption(0);
FUrl := Base_Url;
HTTPMethod('GET', FUrl);
FPage := StreamToStr(Document);
LsdStr := SimpleParse('name="lsd" value="', '"', FPage);
LgnRndStr := SimpleParse('name="lgnrnd" value="', '"', FPage);
UpdateCurrentStepGBCaption(1);
Headers.Clear;
FUrl := Base_Url + '/login.php?next=' + Developers_Url + Tools_Path_Friends;
FStrData := 'lsd=' + LsdStr + '&email=' + UserEMail + '&pass=' + UserPassword +
'&persistent=1&default_persistent=1' + '&charset_test=' + ACharset_Test +
'&timezone=&lgnrnd=' + LgnRndStr + '&lgnjs=n&locale=pl_PL';
Document.Write(PChar(FStrData)^, Length(FStrData));
HTTPMethod('POST', FUrl);
FPage := StreamToStr(Document);
if Pos(Error_Text0, FPage) > 0 then
begin
AlreadyLogged := Result;
SetFocusToEditFields(PasswordEdit);
MessageBox(Application.Handle, PChar(Error_Text0),
PChar(Application.Title), MB_ICONWARNING + MB_OK);
Exit;
end;
if Pos(Error_Text1, FPage) > 0 then
begin
AlreadyLogged := Result;
SetFocusToEditFields(UserEmailEdit);
MessageBox(Application.Handle, PChar(Error_Text1 + '!'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
Exit;
end;
if Pos(Error_Text2, FPage) > 0 then
begin
AlreadyLogged := Result;
SetFocusToEditFields(UserEmailEdit);
MessageBox(Application.Handle, PChar(Error_Text2 + '!'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
Exit;
end;
if Pos(Error_Text3, FPage) > 0 then
begin
AlreadyLogged := Result;
SetFocusToEditFields(PasswordEdit);
MessageBox(Application.Handle, PChar(Error_Text3 + '!'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
Exit;
end;
if Pos(Error_Text4, FPage) > 0 then
begin
MessageBox(Application.Handle, PChar(Error_Text4 + '! ' +
'Zaloguj się do konta tymczasowo przez przeglądarkę WWW. ' +
'Jeżeli to nie pomoże, odczekaj kilka minut i spróbuj ponownie. ' +
'Błąd ten związany jest z zabezpieczeniami stosowanymi przez ' +
'portal FaceBook. A metoda logowania stosowana przez program, ' +
'nie wymaga za to konieczności zmiany ustawień swojego konta i ' +
'dodania ' + Application.Title + ' do akceptowanych aplikacji.'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
Exit;
end;
while (ResultCode = 301) or (ResultCode = 302) do
begin
for I := 0 to Headers.Count - 1 do
begin
RedirPos := Pos(Redir_C, Headers[I]);
if RedirPos > 0 then
begin
RedirUrl := Copy(Headers[I], RedirPos + Length(Redir_C), MaxInt);
if Pos(':443/', RedirUrl) > 0 then
begin
RedirUrl := StringReplace(RedirUrl, ':443/', '/', []);
RedirUrl := StringReplace(RedirUrl, 'http:'#47#47, 'https:'#47#47, []);
end;
Headers.Clear;
HTTPMethod('GET', RedirUrl);
Break;
end;
end;
end;
UpdateCurrentStepGBCaption(2);
FPage := StreamToStr(Document);
FAccesstoken := SimpleParse('"init",', '",["apps.', FPage);
FAccesstoken := SimpleParse(',"', '', FAccesstoken);
if FAccesstoken = '' then
begin
if Pos(Error_Text5, FPage) > 0 then
begin
CopyTextToClipBoard(FUrl);
MessageBox(Application.Handle, PChar(Error_Text5 + '. ' +
'Zaloguj się do konta tymczasowo przez przeglądarkę WWW pod adres: ' +
FUrl + #32 + 'Adres zostal skopiowany do Schowka.'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
end
else
begin
if Pos(Error_Text6, FPage) > 0 then
begin
MessageBox(Application.Handle,
PChar('Prawdopodobnie Twoje hasło zostało zmienione przez FaceBook. ' +
'Sprawdź swoje konto e-mail używane z FaceBookiem aby uzyskać ' +
'nowe hasło i zaloguj się używając go'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
end
else
begin
MessageBox(Application.Handle,
PChar('Nieoczekiwany błąd. Nie mozna pobrać wymaganego tokena. ' +
'Upewnij się, czy posiadasz aktywne połączenie z Internetem. ' +
'Sprawdź również, czy jest ono prawidłowo skonfigurowane oraz ' +
'czy jakiś program nie wpływa na możliwości połączeń protokołem ' +
'HTTP. Ewentualnie zaloguj się na FaceBook przez przeglądarkę ' +
'WWW i sprawdź, czy Twoje konto nie jest tymczasowo blokowane. ' +
'Taka sytuacja może mieć czasami miejsce w przypadku gdy zmieni ' +
'się Twój adres IP, z którego wcześniej często się logowałeś.'),
PChar(Application.Title), MB_ICONERROR + MB_OK);
end;
end;
Exit;
end;
Result := True;
end;
end;
//...