Delphi Indy TIdHTTP Сайт распознает роботов

Я пытаюсь отправить запрос на получение веб-сайта. Проблема заключается в том, что веб-сайт является recongize, если запрашивающий робот

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 является <!DOCTYPE html><head><META NAME="ROBOTS"..... Это пусто, я не могу получить идентификатор сессии.

Заголовки http-запроса совпадают с тем, что отправил мой borwser.

1 ответ

Поскольку я могу иметь реальный 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;
Другие вопросы по тегам