how to login to website using HTTP Client in Delphi xe

六月ゝ 毕业季﹏ 提交于 2019-12-24 06:36:02

问题


i am trying to implement the HTTP Client in my project, i cant login to my account,i get Forbidden!, with IdHTTP its working well, whats is missing or wrong in my code ?

NetHTTPClient1 properties:

Connectiontimeout = 30000  
AllowCookies = True  
HandleRedirects = True  
UserAgent = Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36

NetHTTPRequest1 Properties :

Method String = POST  

URL = https://www.instagram.com/accounts/web_create_ajax/attempt/

Code:

procedure TForm2.Button1Click(Sender: TObject);
var
  Params : TStrings;
  lHTTP: TIdHTTP;
  IdSSL : TIdSSLIOHandlerSocketOpenSSL;
  N: Integer;
  Token,email,S: string;
  Reply: TStringList;
  Cookie: TIdCookie;
begin
  lHTTP := TIdHTTP.Create(nil);
  try
    IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
    IdSSL.SSLOptions.Method := sslvTLSv1;
    IdSSL.SSLOptions.Mode := sslmClient;
    lHTTP.IOHandler := IdSSL;
    lHTTP.ReadTimeout := 30000;
    lHTTP.HandleRedirects := True;
    lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
    lHTTP.Get('https://www.instagram.com', TStream(nil));
    Cookie := lHTTP.CookieManager.CookieCollection.Cookie['csrftoken', 'www.instagram.com'];
    if Cookie <> nil then
      Token := Cookie.Value;
  finally

  end;

  try
    Params := TStringList.Create;
    Params.Add('username=' +'myusername');
    Params.Add('password=' + 'mypassword');
    NetHTTPClient1.CustomHeaders['X-CSRFToken'] := Token;
    NetHTTPClient1.CustomHeaders['X-Instagram-AJAX'] := '1';
    NetHTTPClient1.CustomHeaders['X-Requested-With'] := 'XMLHttpRequest';
    NetHTTPClient1.CustomHeaders['Referer'] := 'https://www.instagram.com/';
    Memo1.Lines.Add(NetHTTPRequest1.Post('https://www.instagram.com/accounts/login/ajax/', Params).StatusText);
  finally

  end;
///login with IdHTTP///Wroks//
  try
  lHTTP.Request.CustomHeaders.Values['X-CSRFToken'] := Token;
  lHTTP.Request.CustomHeaders.Values['X-Instagram-AJAX'] := '1';
  lHTTP.Request.CustomHeaders.Values['X-Requested-With'] := 'XMLHttpRequest';
  lHTTP.Request.Referer := 'https://www.instagram.com/';
  lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
  lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
  Reply := lHTTP.Post('https://www.instagram.com/accounts/login/ajax/', Params);
  Memo1.Lines.Add(Reply);
end;

回答1:


TNetHTTPClient is buggy with handleRedirect and post. https://quality.embarcadero.com/browse/RSP-14671

after when you login, you receive the cookie (the key in some way) and you must use theses cookies in all futur connexion.




回答2:


"TNetHTTPClient is buggy with handleRedirect and post. "

This is already fix in version: 10.2 Tokyo Release 2



来源:https://stackoverflow.com/questions/38647655/how-to-login-to-website-using-http-client-in-delphi-xe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!