Есть ли способ установить время ожидания ответа для получения Инди Tidhttp? - PullRequest
10 голосов
/ 23 июля 2010

Я создал простое приложение для мониторинга веб-сайтов, используя компонент Indy TIdhttp.Я хочу определить, когда назначенная страница не возвращается в течение определенного периода времени (я использую 5000 миллисекунд).В качестве теста я создал страницу на веб-сайте, на которую умышленно уходит 15 секунд, чтобы ответить.Но я не могу заставить свою процедуру «сдаться» через 5 секунд.Я попытался ReadTimeout , предлагаемое решение с использованием таймера и события OnWorkBegin (так и не удалось заставить OnWorkBegin срабатывать сразу послеполучить вызов).

Примечание Меня не беспокоит тайм-аут соединения.Меня беспокоит то, что сервер должен вернуть страницу со временем ожидания.

Вот некоторый исходный код, который я использовал.Он содержит много элементов, на которые я ссылаюсь.

procedure TServLogic.WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
  GetTimer.Enabled := True;
end;
procedure TServLogic.WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  GetTimer.Enabled := False;
end;

procedure TServLogic.GetTimerTimer(Sender: TObject);
begin
  idHttp.Disconnect(True);
end;

procedure TServLogic.CallHttp(mlink: String): String;
begin
  result := '';
  GetTimer := TTimer.create(nil);
  GetTimer.OnTimer := GetTimerTimer;
  GetTimer.Interval := 5000;
  try
    IdHTTP := TIdHTTP.create(nil);
    idhttp.ReadTimeout := 5000;
    IdHttp.OnWorkBegin := WorkBegin;
    IdHttp.OnWorkEnd   := WorkEnd;
    try
      result  := idhttp.get(mLink);
    except
      on e:exception do begin
        AppendToLog('Server did not respond withing 5 seconds');
      end;
    end;
  finally
    GetTimer.Free;
    idhttp.free;
  end;
end;

Ответы [ 2 ]

4 голосов
/ 04 июля 2018

Это не отвечает на конкретный вопрос выше, но, поскольку именно здесь Google берет вас, если вы ищете "indy http timeout", я упомяну здесь, что вы можете установить эти свойства:

TIdHTTP.ReadTimeout
TIdHTTP.ConnectTimeout
3 голосов
/ 04 августа 2010

Я в итоге получил ответ, основываясь на комментариях Роба Кеннеди. Я много раз пытался связаться с ним и попросить его дать «официальный» ответ, чтобы я мог дать ему право голоса. Никогда не слышал назад.

...