申し訳ありませんが、IgnoreReplies
パラメータを使用しTIdHTTP
て、例外を発生させない特定のHTTP応答コードを指定する必要があります。現在、TIdHTTP
一般的に考えられるすべての応答に対して例外を発生させないように指示する方法はありません。例外を発生させずに404などの失敗した応答を受信したい場合は、次のように伝える必要がありますTIdHTTP
。
IdHTTP.Get('http://host/path', [404]);
この構文は、 (保護されたメソッドを直接呼び出さない限りGET
)のような他のリクエストではなく、リクエストでのみ使用できることに注意してください。POST
TIdHTTP.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
戻り値または出力ストリームのいずれかで)。それ以外の場合、内容は次のようになります。破棄されました。AResponseContent
Get()
Post()