Indy - IdHttp как обрабатывать перенаправление страниц?

Использование: Delphi 2010, последняя версия Indy

Я пытаюсь очистить данные с веб-страницы Googles AdSense, чтобы получить отчеты. Однако пока у меня ничего не получалось. Он останавливается после первого запроса и не продолжается.

Используя Fiddler для отладки трафика / запросов на веб-сайт Google AdSense и веб-браузер для загрузки страницы AdSense, я вижу, что запрос (из веб-браузера) генерирует количество перенаправлений до загрузки страницы.

Однако, мое приложение Delphi генерирует только пару запросов, прежде чем оно остановится.

Вот шаги, которые я выполнил:

  1. Перетащите компонент IdHTTP и IdSSLIOHandlerSocketOpenSSL1 в форму.
  2. Установите свойства компонента IdHTTP AllowCookies и HandleRedirects значение True и свойство IOHandler для IdSSLIOHandlerSocketOpenSSL1.
  3. Установите свойство компонента IdSSLIOHandlerSocketOpenSSL1 Method: = 'sslvSSLv23'

Наконец, у меня есть этот код:

procedure TfmMain.GetUrlToFile(AURL, AFile : String);
var
 Output : TMemoryStream;
begin
  Output := TMemoryStream.Create;
  try
    IdHTTP1.Get(FURL, Output);
    Output.SaveToFile(AFile);
  finally
    Output.Free;
  end;
end;

Однако он не попадает на страницу входа, как ожидалось. Я ожидал, что он будет вести себя так, как если бы это был веб-браузер, и продолжал перенаправления, пока не нашел последнюю страницу.

Это результат заголовков из Fiddler:

 HTTP / 1.1 302 Найдено 

  1. Поместите компоненты IdHTTP и IdSSLIOHandlerSocketOpenSSL1 в форму.
  2. Установите для свойств компонента IdHTTP AllowCookies и HandleRedirects значение True, а для свойства IOHandler - значение IdSSLIOHandlerSocketOpenSSL1.
  3. Установите свойство IdSSLIOpenSSL1. 1219] Наконец, у меня есть этот код:

    procedure TfmMain.GetUrlToFile(AURL, AFile : String);
    var
     Output : TMemoryStream;
    begin
      Output := TMemoryStream.Create;
      try
        IdHTTP1.Get(FURL, Output);
        Output.SaveToFile(AFile);
      finally
        Output.Free;
      end;
    end;
    

    Однако он не попадает на страницу входа, как ожидалось. Я ожидал, что он будет вести себя так, как если бы это был веб-браузер, и продолжал перенаправления, пока не нашел последнюю страницу.

    Это результат заголовков из Fiddler:

     HTTP / 1.1 302 Найдено 

    1. Поместите компоненты IdHTTP и IdSSLIOHandlerSocketOpenSSL1 в форму.
    2. Установите для свойств компонента IdHTTP AllowCookies и HandleRedirects значение True, а для свойства IOHandler - значение IdSSLIOHandlerSocketOpenSSL1.
    3. Установите свойство IdSSLIOpenSSL1. 1219] Наконец, у меня есть этот код:

      procedure TfmMain.GetUrlToFile(AURL, AFile : String);
      var
       Output : TMemoryStream;
      begin
        Output := TMemoryStream.Create;
        try
          IdHTTP1.Get(FURL, Output);
          Output.SaveToFile(AFile);
        finally
          Output.Free;
        end;
      end;
      

      Однако он не попадает на страницу входа, как ожидалось. Я ожидал, что он будет вести себя так, как если бы это был веб-браузер, и продолжал перенаправления, пока не нашел последнюю страницу.

      Это результат заголовков из Fiddler:

       HTTP / 1.1 302 Найдено sslvSSLv23 '

    Наконец, у меня есть этот код:

    procedure TfmMain.GetUrlToFile(AURL, AFile : String);
    var
     Output : TMemoryStream;
    begin
      Output := TMemoryStream.Create;
      try
        IdHTTP1.Get(FURL, Output);
        Output.SaveToFile(AFile);
      finally
        Output.Free;
      end;
    end;
    

    Однако он не попадает на страницу входа, как ожидалось. Я ожидал, что он будет вести себя так, как если бы это был веб-браузер, и продолжал перенаправления, пока не нашел последнюю страницу.

    Это результат заголовков из Fiddler:

     HTTP / 1.1 302 Найдено sslvSSLv23 '

Наконец, у меня есть этот код:

procedure TfmMain.GetUrlToFile(AURL, AFile : String);
var
 Output : TMemoryStream;
begin
  Output := TMemoryStream.Create;
  try
    IdHTTP1.Get(FURL, Output);
    Output.SaveToFile(AFile);
  finally
    Output.Free;
  end;
end;

Однако он не попадает на страницу входа, как ожидалось. Я ожидал, что он будет вести себя так, как если бы это был веб-браузер, и продолжал перенаправления, пока не нашел последнюю страницу.

Это результат заголовков из Fiddler:

 HTTP / 1.1 302 Найдено
Расположение: https://encrypted.google.com/
Cache-Control: частный
Тип содержимого: текст / html; charset = UTF-8
Set-Cookie: PREF = ID = 5166063f01b64b03: FF = 0: TM = 1293571783: LM = 1293571783: S = a5OtsOqxu_GiV3d6; expires = Thu, 27-Dec-2012 21:29:43 GMT; путь = /; domain = .google.com
Set-Cookie: NID = 42 = XFUwZdkyF0TJKmoJjqoGgYNtGyOz-Irvz7ivao2z0 - pCBKPpAvCGUeaa5GXLneP41wlpse-yU5UuC57pBfMkv434t7XB1H68EnZ; expires = среда, 29 июня 2011 г., 21:29:43 GMT; путь = /; домен = .google.com; HttpOnly
Дата: Вт, 28 декабря 2010 г., 21:29:43 GMT
Сервер: gws
Длина содержимого: 226
X-XSS-Protection: 1; режим = блок

Во-первых, что-то не так с этим выводом?

Что я должен сделать, чтобы компонент IdHTTP продолжал выполнять перенаправления до последней страницы?

8
задан SteveL 29 December 2010 в 14:17
поделиться