美文网首页
AFNetworking获取Web同步错误码

AFNetworking获取Web同步错误码

作者: 谁在弹奏一曲东风破 | 来源:发表于2017-05-31 10:49 被阅读58次

    【Warming】:AFNetworking 奇葩问题旨在针对奇葩问题提出奇葩的解法,部分验证并在实际中用到,但不保证有隐性问题。

    HTTP常见错误码对照表

    AFNetworking能获取错误码的空间是[200,300],但是如果后台返回一个401,并且带了错误的信息呢?如果不修改AFNetworking是会返回错误的,但是无法获取跟后台同步的错误提示,这个时候就需要修改AFNetwoking的源码了。解决的大概思路

    1、修改AFNetworking获取错误码的空间,找到AFNetworking->Serialization->AFURLResponseSerialization.m
    修改init方法里面的

     self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange(200,100)];
    

    修改范围为(200,310);

    2、修改AFHTTPSessionManager里面的方法

    - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
                                       URLString:(NSString *)URLString
                                      parameters:(id)parameters
                                  uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
                                downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress
                                         success:(void (^)(NSURLSessionDataTask *, id))success
                                         failure:(void (^)(NSURLSessionDataTask *, NSError *))failure
    

    -(NSURLSessionDataTask*)dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler
    

    中的

    if(error){
      if(failure){
          failure(dataTask,error);
      }
    }
    

    屏蔽了,因为此时后台返回的都是“正确”的数据,我们需要对返回的所有的数据进行处理,当然也可以改错误返回, 如failure(void(^)(NSURLSessionDataTask*, id, NSError *))failure, 然后把response也加进去返回

    3、对返回的具体错误码进行解析并处理
    获取错误码的方法

      NSHTTPURLResponse * response = (NSHTTPURLResponse*)task.response;
      NSInteger statusCode = response.statusCode;
    

    如果屏蔽了就加到success里面去处理,如果没有屏蔽而是改了failure回调,则加到failure里面去处理

    至此大功告成!赶快去试一下吧!

    相关文章

      网友评论

          本文标题:AFNetworking获取Web同步错误码

          本文链接:https://www.haomeiwen.com/subject/kavdfxtx.html