
Пример авторизации в Delphi на сайте facebook.com(мобильная версия!)
В Uses добавить:
httpsend, ssl_openssl, RegExpr
function AuthorizeMobile: Byte;
var
Responsedata: TStringStream;
Postdata: TStringStream;
Response: string;
HTTP: THTTPSend;
RegExp: TRegExpr;
//
form_id : string;
user_id : string;
begin
Result := 0;
ResponseData := TStringStream.Create;
PostData := TStringStream.Create
HTTP := THTTPSend.Create;
HTTP.AddPortNumberToHost := False;
RegExp := TRegExpr.Create;
HTTp.Document.Clear;
HTTP.Headers.Clear;
HTTP.HTTPMethod('GET', 'http://m.facebook.com/');
HTTP.Document.SaveToStream(ResponseData);
RegExp.Expression := '"post_form_id"\svalue="([^\s]*)"';
if not(RegExp.Exec(ResponseData.DataString)) then begin
Result := 0;
FreeAndNil(PostData);
FreeAndNil(ResponseData);
Exit;
end
else
form_id := RegExp.Match[1];
PostData.WriteString('lsd=' + '' +'&'+
'post_form_id=' + form_id +'&'+
'email=' + ВАШ ЛОГИН +'&'+
'pass=' + ВАШ ПАРОЛЬ +'&'+
'login=Log In');
HTTp.Document.Clear;
HTTP.Headers.Clear;
HTTP.MimeType:='application/x-www-form-urlencoded';
HTTp.Document.LoadFromStream(PostData);
HTTP.HTTPMethod('POST', 'https://www.facebook.com/login.php?m=m');
Location := GetLocation(HTTP.Headers.Text);
HTTP.Document.Clear;
HTTP.Headers.Clear;
if Location <> '' then begin
HTTP.HTTPMethod('Get', Location);
HTTP.Document.SaveToStream(ResponseData);
Response := string(UTF8Decode(ResponseData.DataString));
if (Pos('Home', Response) <> 0)or
(Pos('Главная', Response) <> 0)or
(Pos('Головна', Response) <> 0)
then
Result := 1;
end;
HTTP.Document.Clear;
HTTP.Headers.Clear;
FreeAndNil(PostData);
FreeAndNil(ResponseData);
end;
var
Responsedata: TStringStream;
Postdata: TStringStream;
Response: string;
HTTP: THTTPSend;
RegExp: TRegExpr;
//
form_id : string;
user_id : string;
begin
Result := 0;
ResponseData := TStringStream.Create;
PostData := TStringStream.Create
HTTP := THTTPSend.Create;
HTTP.AddPortNumberToHost := False;
RegExp := TRegExpr.Create;
HTTp.Document.Clear;
HTTP.Headers.Clear;
HTTP.HTTPMethod('GET', 'http://m.facebook.com/');
HTTP.Document.SaveToStream(ResponseData);
RegExp.Expression := '"post_form_id"\svalue="([^\s]*)"';
if not(RegExp.Exec(ResponseData.DataString)) then begin
Result := 0;
FreeAndNil(PostData);
FreeAndNil(ResponseData);
Exit;
end
else
form_id := RegExp.Match[1];
PostData.WriteString('lsd=' + '' +'&'+
'post_form_id=' + form_id +'&'+
'email=' + ВАШ ЛОГИН +'&'+
'pass=' + ВАШ ПАРОЛЬ +'&'+
'login=Log In');
HTTp.Document.Clear;
HTTP.Headers.Clear;
HTTP.MimeType:='application/x-www-form-urlencoded';
HTTp.Document.LoadFromStream(PostData);
HTTP.HTTPMethod('POST', 'https://www.facebook.com/login.php?m=m');
Location := GetLocation(HTTP.Headers.Text);
HTTP.Document.Clear;
HTTP.Headers.Clear;
if Location <> '' then begin
HTTP.HTTPMethod('Get', Location);
HTTP.Document.SaveToStream(ResponseData);
Response := string(UTF8Decode(ResponseData.DataString));
if (Pos('Home', Response) <> 0)or
(Pos('Главная', Response) <> 0)or
(Pos('Головна', Response) <> 0)
then
Result := 1;
end;
HTTP.Document.Clear;
HTTP.Headers.Clear;
FreeAndNil(PostData);
FreeAndNil(ResponseData);
end;
Функция для обработки редиректов:
function GetLocation(Header : string) : string;
begin
RegExp.Expression := 'Location:\s([^\s]*)';
if RegExp.Exec(Header) then
Result := RegExp.Match[1]
else
Result := '';
end;
Есть будут какие-то вопросы, то с радостью на них отвечу.
