Помогите пожалуйста авторизация в instagrame на Delphi.Не авторизируется.В чём может быть проблема? PHP: function extract(const text, begin1, end1: string): string; var startpos, endpos: integer; begin result := ''; startpos := Pos(begin1, text); if startpos < 1 then exit; inc(startpos, length(begin1)); endpos := PosEx(end1, text, startpos); if endpos < 1 then exit; result := Copy(text, startpos, endpos - startpos); end; procedure TForm3.Button1Click(Sender: TObject); var auth:tstringlist; bufer:string; token,StrPage: string; 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;
С чего ты взял, что запрос идёт на https://instagram.com/accounts/login/csrfmiddlewaretoken='+token+'&username='+Edit1.Text+'&password='+Edit2.Text ?
Вот PHP: POST /accounts/login/ HTTP/1.1 Host: instagram.com User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0 Accept: text/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
Изменил авторизация всё равно не авторизируется 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;
Могу только посоветовать начать с чего-нибудь более простого. Работать с сетью у тебя, судя по всему, еще не получается
У МЕНЯ ВЫШЛО ВОТ ТАК 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
Вот рабочий код авторизации: 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
Зачем мучить человека? У меня, например, вот тоже засада: не могу провести аутентификацию в приложении в инстраграме. Может кто знает?
Вот: подтверждает максимальные разрешения для приложения, и логинтся. Выдрал из класса для работы с инстаграммом. Так что если чего не хватает - догадаешься например 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;
Благодарю. Еще в оф. API сказано, что для обращения к нему нужен какой-то Access-токен. Но какой именно?
Т.е. ту ф-ию, которую я скинул тебе даже лень было просмотреть? вот же оно: key:=Pars('access_token=',FHTTP.Response.Location,'');