2016-07-28 21 views
0

Ich versuche den HTTP Client in meinem Projekt zu implementieren, ich kann mich nicht einloggen, ich bekomme Forbidden !, mit IdHTTP funktioniert es gut, was fehlt oder ist falsch mein Code?Wie kann ich mich mit HTTP Client in Delphi einloggen xe

NetHTTPClient1 Eigenschaften:

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 Eigenschaften:

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; 
+0

Nun, für den Anfang, können Sie nicht wirklich die Anmeldung mit 'TIdHTTP' und dann mit' TNetHTTPClient' beenden, sie teilen keine Statusinformationen miteinander, wie Cookies. Es wäre nützlicher, wenn Sie Ihren vollständigen 'TIdHTTP'-Code zeigen würden, der für Ihren Login funktioniert, und dann kann Ihnen jemand helfen, diesen Login in'TNetHTTPClient' zu übersetzen. –

+0

@RemyLebeau cool, Hinzugefügt – cyberdude

Antwort

0

TNetHTTPClient ist Buggy mit HandleRedirect und Post. https://quality.embarcadero.com/browse/RSP-14671

Wenn Sie sich anmelden, erhalten Sie den Cookie (der Schlüssel in irgendeiner Weise) und Sie müssen diese Cookies in allen zukünftigen Verbindungen verwenden.