如何使用Delphi xe中的HTTP Client登录网站 [英] how to login to website using HTTP Client in Delphi xe

查看:2337
本文介绍了如何使用Delphi xe中的HTTP Client登录网站的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的项目中实施HTTP客户端,我无法登录到我的帐户,我得到禁止!, IdHTTP 它运作良好,什么是丢失或者我的代码有错吗?

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属性:

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属性:

NetHTTPRequest1 Properties :

Method String = POST  

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

代码:

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;


推荐答案

TNetHTTPClient有一些错误的handleRedirect和post。 https://quality.embarcadero.com/browse/RSP-14671

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

在您登录后,您会收到cookie(某种方式的密钥),您必须在所有未来联系中使用这些cookie。

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

这篇关于如何使用Delphi xe中的HTTP Client登录网站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆