//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
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。