4

私は、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の優れたドキュメントへのリンクを持っていれば素晴らしいと思います。

4

1 に答える 1

7

はい、もちろん例外が発生します。これがIndyの動作方法であり、Remyが例外をキャッチするようにアドバイスしたのはそのためです。

今まで混乱しているのは、例外をキャッチするコードがある場合でも、Delphiデバッガーが例外をインターセプトし、プログラムの実行を一時停止して、例外が発生したことを通知することです。私は以前にその現象について書いたことがあります。

プログラムはこれらすべてのエラー自体を処理するように設計されているため、デバッグ中にstatus-200以外の例外について知ることに興味がないようです。おそらくEIdHTTPProtocolException、デバッガーの無視される例外のリストに追加するのが最善の方法です。これを行う最も簡単な方法は、次にデバッガーから通知されたときに「この例外タイプを無視する」を選択することです。

于 2011-03-13T18:52:00.913 に答える