私はidhttp(Indy)を使ってウェブサイトのチェックをしています。私がそれをしたいのは、リクエストが送信された後にサーバからの応答コードをチェックすることだけです。私は実際に200 OKコードを監視しているので、サーバからHTML出力を受け取る必要はありません。他のコードは何らかの形の問題があることを意味します。IdHttpただ応答コードを取得
私はidhttpのヘルプドキュメントを調べましたが、可能な限りこれを行うには、コードをMemoryStream
に割り当ててからすぐにクリアするしかないと思いますが、これはあまり効率的ではなく、メモリを使用しますそれは必要ではありません。サイトを呼び出して応答を取得する方法がありますが、より効率的でメモリを浪費しないHTMLを無視しますか?
現在のところ、コードは次のようになります。しかし、これは私がまだテストしていないサンプルコードです。私は何をしようとしているのかを説明するために使っています。
Procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
s : TStream;
url : string;
code : integer;
begin
s := TStream.Create();
http := Tidhttp.create();
url := 'http://www.WEBSITE.com';
try
http.get(url,s);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
s.Free();
http.Free();
end;
をあげる私はちょうどより、このコードで遊んでてきました。これらはすべてスレッド内で実行されますが、200コード応答以外のものがあれば、 404、302などのエラーが発生したり、ソケットエラーが発生したりすると、スレッドが終了します。 – jskrwyk
リトリーブが成功したことを示す応答コードでは、例外が発生します。あなたのスレッドが例外を処理していない場合、または少なくとも実際に発生した例外タイプを処理していない場合は、スレッドは終了します(そして 'TThread.FatalException'プロパティが設定されます)。私の例では、 'EIdHTTPProtocolException'例外のみを処理しています。必要に応じて、他のタイプの例外を処理するスレッドコードを展開します。 –
@RemyLebeau「続行」「100」応答を受け取ったらどうなりますか?もう一度やり直す必要がありますよね? – PSyLoCKe