Я пишу программу для проверки веб-сайтов на предмет их текущего статуса, например, 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, потому что она выглядит разреженной,