AFN如何拿到请求失败时,服务器返回的失败数据
2016-07-28 本文已影响2639人
iOS之星
从项目开始到现在一直在跟踪一个问题,就是在AFN请求失败时,ios这边拿不到服务器放回的失败数据只能拿都服务器标准的请求失败的状态码.而我项目中好多处都要对请求失败时那到服务器数据
上图是正常请求失败时,打印的失败信息,无论你打印error的任何属性,或task的任何属性都拿不到服务器写死的中文的一个数据.
也问过很多朋友,他们公司的做法是只要是HTTP 请求,只要URL和填的参数的key是正确的,无任key的值是否正确,他都能请求成功,在AFN成功的block里拿到数据,从而提示用户.
但是我的项目用AFN只要请求失败都走失败的那个block,而在这block里根本就拿不到服务器数据.
我刚开始的做法是,通过失败状态码,写死数据,当被老大批了,客户那边也投诉, 因为有些状态码根本就有两种甚至多种失败解释,你用一个状态码来写死,也只能是写死一种情况.而且只要对HTTP 错误码有研究的大神都知道,HTTP错误码有几千种,你能都写的完么.
后来我尝试用苹果原生的session请求来写,发现能拿到请求失败时服务器数据,但是我HTTP好多处都用了,要改的话好麻烦,而且还要考虑性能问题,线程问题,以及别的问题. 到这里我就考虑到AFN底层是基于NSURLSession来写的一个框架, 这底层应该能拿到请求失败时的数据啊.我就想我能不能通过设置什么参数,或重写什么方法就可以拿到数据呢.
后来,被我整好了,下面是代码截图
最后就能拿到请求失败body里的数据了