申し訳ありませんが、IgnoreRepliesパラメータを使用しTIdHTTPて、例外を発生させない特定のHTTP応答コードを指定する必要があります。現在、TIdHTTP一般的に考えられるすべての応答に対して例外を発生させないように指示する方法はありません。例外を発生させずに404などの失敗した応答を受信したい場合は、次のように伝える必要がありますTIdHTTP。
IdHTTP.Get('http://host/path', [404]);
この構文は、 (保護されたメソッドを直接呼び出さない限りGET)のような他のリクエストではなく、リクエストでのみ使用できることに注意してください。POSTTIdHTTP.DoRequest()
Indyは、例外処理を中心に特別に設計されています。Indyを効果的に使用したい場合は、例外を回避するのではなく、受け入れる必要があります。TIdHTTP.Get()ラッピングやTIdHTTP.Post()小さなtry/exceptブロックで何がそんなに面倒なのですか?考えられるすべての例外を処理したくない場合は、exceptブロックEIdHTTPProtocolExceptionを単独で処理することができます。
try
IdHTTP.Get('http://host/path');
except
on E: EIdHTTPProtocolException do
begin
if E.ErrorCode <> 404 then Raise;
end;
end;
更新:さらに考えてみると、TIdHTTP.HTTPOptionsすべてのステータスコードの例外を無効にするために、プロパティに新しいフラグを追加する価値があるかもしれません。検討中です。
更新:新しいhoNoProtocolErrorExceptionフラグがTIdHTTP.HTTPOptionsプロパティに追加されました:
IdHTTP.HTTPOptions := IdHTTP.HTTPOptions + [hoNoProtocolErrorException];
IdHTTP.Get('http://host/path');
// use IdHTTP.ResponseCode as needed...
更新:さらに、hoWantProtocolErrorContentフラグもあります。hoNoProtocolErrorExceptionが有効でHTTPエラーが発生した場合、がhoWantProtocolErrorContent有効になっていると、エラーの内容が呼び出し元に返されます(呼び出されている/のバージョンに応じて、String戻り値または出力ストリームのいずれかで)。それ以外の場合、内容は次のようになります。破棄されました。AResponseContentGet()Post()