加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:38:42 所属栏目:大数据 来源:网络整理
导读:有没有办法阻止Indy在任何/所有HTTP状态上引发异常? 我对IgnoreReplies数组的理解是,它会阻止这些状态再次出现,但这不是我想要的.我希望所有状态都回来,而且没有一个可以引发异常.例如,有大量REST服务返回404,这被认为是完全“有效”的响应. 我真的不想在异
有没有办法阻止Indy在任何/所有HTTP状态上引发异常?

我对IgnoreReplies数组的理解是,它会阻止这些状态再次出现,但这不是我想要的.我希望所有状态都回来,而且没有一个可以引发异常.例如,有大量REST服务返回404,这被认为是完全“有效”的响应.

我真的不想在异常处理程序中使用我的代码的1/2,所以有没有办法让当前的Indy只返回一切?

解决方法

抱歉,您必须使用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()的版本被调用),否则内容将被丢弃.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读