Обработка ошибок TidHTTP - PullRequest
       11

Обработка ошибок TidHTTP

4 голосов
/ 13 марта 2011

Я пишу программу для проверки веб-сайтов на предмет их текущего статуса, например, 200 ОК. Я использую Indy HTTP, поставляемый с Delphi 2010 для этой задачи, и у меня есть текущий код.

procedure TCheckSiteIndividual.Execute;
var
http : TIdhttp;

begin
  try
    try
      http := Tidhttp.create(nil);  //Create indy
      http.Get(CSiteURL,nil);  //Send Request To Check Site
    except
      on E: EIdHTTPProtocolException do
       status := http.ResponseText; // or: code := E.ErrorCode;
    end;

    status := http.ResponseText;   //Return Status of Site
    synchronize(updateform);   //Update data to form
  finally
   http.Free;
  end;
end;

Переменная CSiteURL устанавливается в конструкторе потоков, а переменная status является переменной для всего потока.

Попытка, за исключением частей этого кода, пришла от Реми Лебо - TeamB здесь - вопрос, который я задал, когда вначале возился с этой идеей. У меня проблема в том, что этот код работает, только если сайт возвращает код 200 OK. Все остальное вызывает исключение, в том числе, если я отключаю интернет. Это также вызывает исключения на сайтах, которые перенаправляют, например, www.google.com вызывает исключение во время отладки, которая, как я предполагаю, приводит к тому, что он перенаправляет меня на www.google.co.uk, однако, если я продолжаю после исключения, он возвращает код 301 FOUND без проблем.

Окончательный результат, который я искал, чтобы он давал мне возврат в зависимости от того, находится ли сайт в сети или имел ошибку (например, HTML RETURN CODE), а также оставлял отзыв, когда сайт не существует (например, зарегистрированный URL) или просто не может связаться.

Другие советы, которые я ищу, касаются получения дополнительной информации из запроса. В частности, в данный момент я также ищу IP сайта, который был проверен.

Было бы также неплохо, чтобы он работал без необходимости иметь http: // перед любым URL, поэтому, например, www.google.com будет работать, что на данный момент не работает из-за неизвестного протокола.

В принципе, было бы замечательно, если бы у кого-то была ссылка на какую-нибудь красивую документацию для IndyHTTP, потому что она выглядит разреженной,

1 Ответ

7 голосов
/ 13 марта 2011

Да, конечно, это вызывает исключение.Вот как работает Indy, и именно поэтому Реми посоветовал вам перехватывать исключения.

Теперь вас смущает то, что, хотя у вас есть код для перехвата исключений, отладчик Delphi по-прежнему перехватывает их и приостанавливает выполнение вашего запроса.программа, чтобы уведомить вас, что произошло исключение. Я уже писал об этом явлении ранее.

Поскольку вам, очевидно, не интересно знать об исключениях, не относящихся к состоянию 200, во время отладки, поскольку ваша программа предназначена для обработкивсе эти ошибки - ваш лучший вариант, вероятно, добавить EIdHTTPProtocolException в список игнорируемых исключений отладчика.Самый простой способ сделать это - выбрать «Игнорировать этот тип исключения» при следующем уведомлении отладчика.

...