我对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()的版本被调用),否则内容将被丢弃.
总结以上是内存溢出为你收集整理的delphi – Indy和REST – 我可以防止异常吗?全部内容,希望文章能够帮你解决delphi – Indy和REST – 我可以防止异常吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)