Delphi Indy TIdHTTP网站识别机器人

Delphi Indy TIdHTTP网站识别机器人,delphi,http-post,indy,idhttp,Delphi,Http Post,Indy,Idhttp,我正在尝试向网站发送一个Get请求。问题是,如果请求者是一个机器人,网站是无法识别的 const _URL = 'https://www.URL.com/'; var sSessionID:String; Params: TStringList; IdSSL: TIdSSLIOHandlerSocketOpenSSL; begin IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1); try IdHTTP1.IO

我正在尝试向网站发送一个Get请求。问题是,如果请求者是一个机器人,网站是无法识别的

const _URL = 'https://www.URL.com/';
var
  sSessionID:String;
  Params: TStringList;
  IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
  try
    IdHTTP1.IOHandler := IdSSL;
    IdHTTP1.AllowCookies := True;
    IdHTTP1.HandleRedirects := True;
    IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0';
    IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
    IdHTTP1.Request.AcceptLanguage := 'en-GB,en;q=0.5';
    IdHTTP1.Request.Connection := 'keep-alive';
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    sSessionID := IdHTTP1.Get(_URL);
    {....
        extracting SessionID
            Params.Add('SessionID=' + 'sSessionID');
                IdHTTP1.Post(_URL, Params);
                    .....}
  finally
    IdSSL.Free;
  end; 

IdHTTP.get的结果是
,因为我可以得到真实的URL这是我最好的猜测:

uses
  Math;
...
    const
      _URL = 'https://www.url.com/';
    var
      sSessionID: string;
      Params: TStringList;
      IdSSL: TIdSSLIOHandlerSocketOpenSSL;
    begin
      IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
      try
        IdHTTP1.IOHandler := IdSSL;
        IdHTTP1.AllowCookies := True;
        IdHTTP1.HandleRedirects := True;
        IdHTTP1.Request.CustomHeaders.AddValue('X-Forwarded-For', Format('%d.%d.%d.%d', [Random(255), Random(255), Random(255), Random(255)]));
        IdHTTP1.Request.UserAgent := Format('Mozilla/%d.0 (Windows NT %d.%d; rv:2.0.1) Gecko/20100101 Firefox/%d.%d.%d', [RandomRange(3, 5), RandomRange(3, 5), Random(2), RandomRange(3, 5), Random(5), Random(5)]);
        IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
        IdHTTP1.Request.AcceptLanguage := 'en-GB,en;q=0.5';
        IdHTTP1.Request.Connection := 'keep-alive';
        IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
        sSessionID := IdHTTP1.Get(_URL);
    ...
      finally
        ...
      end;

有可能拥有你试图调用的真实URL吗?@JensBorrisholt不幸的是我不能这样做,那么很难帮助你,因为我无法测试我自己。但是你可以尝试在HTTP头文件中发送一个假的Ip地址。但是,我不能说它是否有效,因为我自己无法尝试。你能解释一下你做了什么改变,以及为什么你认为它会有效吗?@jens borrisholt,它只起了一两次作用,我不确定之后,结果显示为机器人。@RobKennedy,你可能会看到,我放了一个假ip地址(X-Forwarded-for)和UserAgent插入HTTP头中。这将愚弄一些网站。外汇。IMDB.com和Youtube.com。Bu正如我在回答中所写,这是一个猜测,因为我不能用它允许的不同IP再次测试真正的URL。。它在每个IP上都是相同的,你可以通过robot发送5个请求,然后该页面就会出现。当我测试你的答案时,我已经因为另一个原因更改了我的IP。@AbdulrahmanAljehani,正如我用真实URL所说的,我不能再做了。