AFNetworking获取Web同步错误码

【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同步错误码)