美文网首页
RequstManager

RequstManager

作者: _iceCoke | 来源:发表于2019-03-15 11:13 被阅读0次

//IceRequestManager.h

#import <Foundation/Foundation.h>
#import <AFNetworking.h>

typedef NS_ENUM(NSInteger, iceRequstType) {
    iceRequstTypeGET       = 0,
    iceRequstTypePOST,
    iceRequstTypePUT,
    iceRequstTypePATCH,
    iceRequstTypeDELETE,
};

@interface IceRequestManager : NSObject

+ (void)request: (iceRequstType)type URL:(NSString *)urlString Header:(void (^)(AFHTTPRequestSerializer *header))header Parameter:(void (^)(NSMutableDictionary *param))parameter Progress:(void (^)(NSProgress *rate))progress Success:(void (^)(id response))success Failure:(void (^)(NSError *error))failure;
+ (void)cancelRequest;

@end

//IceRequestManager.m

#import "IceRequestManager.h"
#define iceWeakSelf    __weak typeof(self) weakSelf = self;
#define iceStrongSelf  __strong typeof(self) strongSelf = weakSelf;


@interface IceRequestManager ()
@property(strong, nonatomic)AFHTTPSessionManager *afnManager;

@end


@implementation IceRequestManager
#pragma 单例
static IceRequestManager* _manager = nil;
+ (instancetype)manager {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _manager = [[super allocWithZone:NULL] init];
    });
    return _manager;
}

+ (id)allocWithZone: (struct _NSZone *)zone {
    return [self manager];
}

- (id)copyWithZone: (struct _NSZone *)zone {
    return [[self class] manager];
}

/*=================================================================================================*/
#pragma 获得afnManager
- (AFHTTPSessionManager *)afnManager {
    if (!_afnManager) {
        //初始化
        AFHTTPSessionManager *afnManager = [AFHTTPSessionManager manager];
        //https
        AFSecurityPolicy * policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
        policy.allowInvalidCertificates = YES;
        policy.validatesDomainName = NO;
        afnManager.securityPolicy = policy;
        
        _afnManager = afnManager;
    }
    return _afnManager;
}

/*=================================================================================================*/
#pragma 类方法
+ (void)request: (iceRequstType)type URL:(NSString *)urlString Header:(void (^)(AFHTTPRequestSerializer *header))header Parameter:(void (^)(NSMutableDictionary *param))parameter Progress:(void (^)(NSProgress *rate))progress Success:(void (^)(id response))success Failure:(void (^)(NSError *error))failure {
    [[self manager] request:type URL:urlString Header:header Parameter:parameter Progress:progress Success:success Failure:failure];
}

+ (void)cancelRequest {
    [[self manager] cancelRequest];
}

/*=================================================================================================*/
#pragma 实例方法
- (void)request: (iceRequstType)type URL:(NSString *)urlString Header:(void (^)(AFHTTPRequestSerializer *header))header Parameter:(void (^)(NSMutableDictionary *param))parameter Progress:(void (^)(NSProgress *rate))progress Success:(void (^)(id response))success Failure:(void (^)(NSError *error))failure {
    //设置请求头、参数
    NSMutableDictionary *paramM = [self handelHeader:header Parameter:parameter];
    iceWeakSelf
    switch (type) {
        case iceRequstTypeGET: {
            [self.afnManager GET:urlString parameters:paramM progress:progress success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                [weakSelf handelSuccess:responseObject success:success];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                [weakSelf handelError:error task:task failure:failure];
            }];
        }
            break;
            
        case iceRequstTypePOST: {
            [self.afnManager POST:urlString parameters:paramM progress:progress success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                [weakSelf handelSuccess:responseObject success:success];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                [weakSelf handelError:error task:task failure:failure];
            }];
        }
            break;
            
        case iceRequstTypePUT: {
            [self.afnManager PUT:urlString parameters:paramM success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                [weakSelf handelSuccess:responseObject success:success];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                [weakSelf handelError:error task:task failure:failure];
            }];
        }
            break;
            
        case iceRequstTypePATCH: {
            [self.afnManager PATCH:urlString parameters:paramM success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                [weakSelf handelSuccess:responseObject success:success];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                [weakSelf handelError:error task:task failure:failure];
            }];
        }
            break;
            
        case iceRequstTypeDELETE: {
            [self.afnManager DELETE:urlString parameters:paramM success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                [weakSelf handelSuccess:responseObject success:success];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                [weakSelf handelError:error task:task failure:failure];
            }];
        }
            break;
            
        default:
            break;
    }
    
}

- (void)cancelRequest {
    [self.afnManager.session invalidateAndCancel];
}

/*=================================================================================================*/
#pragma 请求头和参数的处理
- (NSMutableDictionary *)handelHeader:(void (^)(AFHTTPRequestSerializer *))header Parameter:(void (^)(NSMutableDictionary *))parameter{
    //设置请求头
    self.afnManager.requestSerializer = [AFJSONRequestSerializer serializer];
    //self.afnManager.requestSerializer setValue:@"" forHTTPHeaderField:@"";
    if (header) {
        header(self.afnManager.requestSerializer);
    }
    //设置请求参数
    NSMutableDictionary *paramM = [NSMutableDictionary dictionary];
    //paramM setValue:@"" forKey:@"";
    if (parameter) {
        parameter(paramM);
    }
    return paramM;
}

#pragma 处理回调
//成功
- (void)handelSuccess: (id)responseObject success:(void (^)(id))success {
    if (responseObject[@"data"]) {
        if ([responseObject[@"code"] integerValue] == 0) {
            if (success) {
                success(responseObject[@"data"]);
            }
        }else {
            NSLog(@"code错误!==> %@ /n", responseObject);
        }
    }else {
        if (success) {
            success(responseObject);
        }
    }
}
//失败
- (void)handelError: (NSError *)error task: (NSURLSessionDataTask *)task failure:(void (^)(NSError *))failure {
    if (failure) {
        failure(error);
    }
    NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
    NSLog(@"错误码:%zd", responses.statusCode);
    
    NSData *data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
    if (data) {
        id body = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        if ([body isKindOfClass:[NSDictionary class]]) {
            NSDictionary *dict = (NSDictionary *)body;
            if (dict[@"code"]) {
                NSLog(@"错误信息:%@", dict[@"errmsg"]);
            }
        }
    }
}


@end

相关文章

网友评论

      本文标题:RequstManager

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