gpt4 book ai didi

delphi - Indy 和 REST - 我可以防止异常吗?

转载 作者:行者123 更新时间:2023-12-03 15:20:06 27 4
gpt4 key购买 nike

有没有办法阻止 Indy 在任何/所有 HTTP 状态上引发异常?

我对 IgnoreReplies 数组的理解是,它将阻止这些状态返回,但这不是我想要的。我希望所有状态都回来,并且没有一个状态引发异常。例如,有很多 REST 服务会返回 404,这被认为是完全“有效”的响应。

我真的不希望 1/2 的代码出现在异常处理程序中,那么有没有办法让当前的 Indy 只返回所有内容?

最佳答案

抱歉,您必须使用 IgnoreReplies 参数来告诉 TIdHTTP 哪些特定的 HTTP 回复代码不引发异常。目前无法告诉 TIdHTTP 一般不会对所有可能的回复引发异常。如果您想收到不成功的回复,例如 404,而不引发异常,那么您必须告诉 TIdHTTP,例如:

IdHTTP.Get('http://host/path', [404]);

请注意,此语法仅适用于 GET 请求,不适用于其他请求,例如 POST(除非您调用 protected TIdHTTP.DoRequest()直接方法)。

Indy 是专门围绕异常处理而设计的。如果你想有效地使用 Indy,你必须拥抱异常,而不是避免它们。将 TIdHTTP.Get()TIdHTTP.Post() 包装在一个小的 try/except block 中有何麻烦?如果您不想处理所有可能的异常,则可以让 except block 自行处理 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() 版本),否则内容将被丢弃。

关于delphi - Indy 和 REST - 我可以防止异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15013068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com