私は、Webサイトの現在のステータスをテストするために、Webサイトでチェックを実行するプログラムを作成しています(例:200 OK)。このタスクにはDelphi2010に付属のIndyHTTPを使用しており、現在のコードを使用しています。
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
はスレッド全体に対する変数です。
このコードの一部を除いて、この試みはRemy Lebeau-TeamBからのものでした。これは、最初にこのアイデアをいじったときに私が尋ねた質問でした。私が抱えている問題は、このコードが機能するのは、サイトが200OKコードを返した場合のみであるということです。インターネットを無効にした場合を含め、他の何かが例外を引き起こします。これにより、リダイレクトするサイトでも例外が発生します。たとえば、www.google.comはデバッグ中に例外を発生させます。これにより、www.google.co.ukにリダイレクトされると推測されますが、例外を超えて続行すると、301FOUNDコードが返されます。問題はありません。
私が探している最終結果は、サイトがオンラインであるかエラーが発生しているか(HTML RETURN CODEなど)に基づいてリターンを返し、サイトが存在しない場合(未登録のURLなど)にフィードバックを提供することです。または単に連絡することができません。
私が探している他のアドバイスは、リクエストからさらに情報を取り戻す方法です。具体的には、現時点では、チェックしたサイトのIPも取得したいと考えています。
また、URLの前にhttp://がなくても機能するようにすると便利です。たとえば、www.google.comは機能しますが、プロトコルが不明なため、現時点では機能しません。
基本的に、IndyHTTPはまばらに見えるので、誰かがIndyHTTPの優れたドキュメントへのリンクを持っていれば素晴らしいと思います。