iOS网络请求库
pod 集成
pod 'AFNetworking', '~> 4.0'
或者下载附件直接添加到项目当中
AFNetworking.zip 4.0
AFN3.x.zip 3.x
作为一个iOS开发者耳熟能详的网络请求库 .具体用法不在赘述. 这里简单介绍一下使用中的技巧吧(因为目前普遍使用的是3.x的版本,所以技巧主要适用于3.x )
正常用法:
[[AFHTTPSessionManager manager] POST:@"port"parameters:nilprogress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
可其实AFN的manager方法只是伪单例. 我们完全可以基于AFN进行一次二次封装. 做成真单例
例:ZyNetWorking.h
**
* 请求成功所走方法
*
* @param responseObject 请求返还的数据
*/
typedef void (^ZuYResponseSuccess)(NSURLSessionDataTask * task,id responseObject,NSInteger code);
/**
* 请求错误所走方法
*
* @param error 请求错误返还的信息
*/
typedef void (^ZYResponseFail)(NSURLSessionDataTask * task, NSError * error);
typedef void (^ZYProgress)(NSProgress *progress);
@interfaceZyNetworking : NSObject
+ (instancetype)shareInstance;
-(void)POST:(NSString *)url
params:(NSDictionary *__nullable)params
success:(ZuYResponseSuccess)success
fail:(ZYResponseFail)fail;
ZyNetWorking.m
@interfaceZyNetworking ()
@property (nonatomic, strong) AFHTTPSessionManager *manager;
@end
@implementationZyNetworking
staticZyNetworking *_instance = nil;
+ (instancetype)shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[super allocWithZone:NULL] init];
_instance.manager = [AFHTTPSessionManagermanager];
_instance.manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObjects:@"text/plain",@"application/json", @"text/json", @"text/javascript",nil];
_instance.manager.requestSerializer.timeoutInterval = 30.f;// 请求超时时间
}) ;
return_instance;
}
-(void)POST:(NSString *)url params:( NSDictionary *__nullable)params
success:(ZuYResponseSuccess)success fail:(ZYResponseFail)fail{
//如果需要请求token权鉴 ,可也在这里进行统一处理
[_instance.manager.requestSerializersetValue:token forHTTPHeaderField:@"token"];
[_instance.manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//your code
//根据你的业务需求进行你想要的处理
//甚至可以配合测试业务处理请求日志
NSInteger code = [[responseObject objectForKey:@"code"] integerValue];
success(task,responseObject,code);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
// your code .
//示例: 根据失败也业务码进行不同的处理 .例如401 需要重新请求token 402强制退出登录等 . 也可记录请求日志(错误)
// 如不需要也可直接做 fail(task,error)的回调
if (responses.statusCode == 401) {
[self zuyuTokenRefresh:url params:params];
}else if (responses.statusCode == 402) {
}else{
fail(task,error);
}
}];
}