// // HttpRequestHelper.m // xplan-ios // // Created by zu on 2021/9/3. // #import "HttpRequestHelper.h" #import "ApiHost.h" #import "YYUtility.h" #import "AccountInfoStorage.h" #import "YYReachability.h" #import @implementation HttpRequestHelper +(AFHTTPSessionManager *)requestManager { static AFHTTPSessionManager *manager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [[AFHTTPSessionManager manager]initWithBaseURL:[NSURL URLWithString:API_HOST_URL]]; manager.requestSerializer.timeoutInterval = 15; manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer.HTTPShouldHandleCookies = YES; // 客户端是否信任非法证书 manager.securityPolicy.allowInvalidCertificates = YES; AFSecurityPolicy *securityPolicy= [AFSecurityPolicy defaultPolicy]; manager.securityPolicy = securityPolicy; // 是否在证书域字段中验证域名 [manager.securityPolicy setValidatesDomainName:NO]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain",@"image/jpeg",@"image/png", nil]; }); return manager; } + (void)GET:(NSString *)method params:(NSDictionary *)params success:(void (^)(BaseModel *data))success failure:(void (^)(NSInteger resCode, NSString *message))failure { if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == 0) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ failure(-1, @"请检查网络连接。"); }); return; } [self configHeaders]; params = [self configBaseParmars:params]; #ifdef DEBUG NSLog(@"\nmethod:\n%@\nparameter:\n%@", method, params); #endif AFHTTPSessionManager *manager = [HttpRequestHelper requestManager]; [manager GET:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { #ifdef DEBUG NSLog(@"\n%@", responseObject); #endif BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject]; if (baseModel.code == 200) { success(baseModel); } else { failure(baseModel.code, baseModel.message); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { #ifdef DEBUG NSLog(@"\n%@", error); #endif if (error.code == -1009) { failure(error.code, @"网络异常,请检查网络后重试。"); } else { failure(error.code, @"服务器正忙,请稍后重试。"); } }]; } + (void)POST:(NSString *)method params:(NSDictionary *)params success:(void (^)(BaseModel *data))success failure:(void (^)(NSInteger resCode, NSString *message))failure { if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == 0) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ failure(-1, @"请检查网络连接。"); }); return; } [self configHeaders]; params = [self configBaseParmars:params]; #ifdef DEBUG NSLog(@"\nmethod:\n%@\nparameter:\n%@", method, params); #endif AFHTTPSessionManager *manager = [HttpRequestHelper requestManager]; [manager POST:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { #ifdef DEBUG NSLog(@"\n%@", responseObject); #endif BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject]; if (baseModel.code == 200) { success(baseModel); } else { failure(baseModel.code, baseModel.message); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { #ifdef DEBUG NSLog(@"\n%@", error); #endif if (error.code == -1009) { failure(error.code, @"网络异常,请检查网络后重试。"); } else { failure(error.code, @"服务器正忙,请稍后重试。"); } }]; } + (void)request:(NSString *)url method:(HttpRequestHelperMethod)method params:(NSDictionary *)params success:(void (^)(BaseModel *data))success failure:(void (^)(NSInteger resCode, NSString *message))failure { switch (method) { case HttpRequestHelperMethodGET: { [self GET:url params:params success:success failure:failure]; } break; case HttpRequestHelperMethodPOST:{ [self POST:url params:params success:success failure:failure]; } break; } } + (void)request:(NSString *)path method:(HttpRequestHelperMethod)method params:(NSDictionary *)params completion:(HttpRequestHelperCompletion)completion { [self request:path method:method params:params success:^(BaseModel *data) { if (completion) { completion(data, 200, nil); } } failure:^(NSInteger resCode, NSString *message) { if (completion) { completion(nil, resCode, message); } }]; } + (void)configHeaders { AFHTTPSessionManager *client = [HttpRequestHelper requestManager]; if ([[AccountInfoStorage instance] getUid].length > 0) { [client.requestSerializer setValue:[[AccountInfoStorage instance] getUid] forHTTPHeaderField:@"pub_uid"]; } else { [client.requestSerializer setValue:nil forHTTPHeaderField:@"pub_uid"]; } if ([[AccountInfoStorage instance] getTicket].length > 0) { [client.requestSerializer setValue:[[AccountInfoStorage instance] getTicket] forHTTPHeaderField:@"pub_ticket"]; }else { [client.requestSerializer setValue:nil forHTTPHeaderField:@"pub_ticket"]; } } + (NSDictionary*)configBaseParmars:(NSDictionary *)parmars { NSDictionary *defaultBasciParame = @{ @"os" : @"iOS", @"osVersion" : [YYUtility systemVersion], @"netType" : ([YYUtility networkStatus] == ReachableViaWiFi) ? @2 : @1, @"ispType" : @([YYUtility carrierIdentifier]), @"channel" : [YYUtility getAppSource] ? : @"", @"model" : [YYUtility modelName], @"deviceId" : [YYUtility deviceUniqueIdentification], @"appVersion" : [YYUtility appVersion], @"app" : [YYUtility appName] }; if (!parmars||![parmars isKindOfClass:[NSDictionary class]]){ NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:defaultBasciParame]; return dic; } NSMutableDictionary * dic = [NSMutableDictionary dictionaryWithDictionary:parmars]; for (NSString *parameKey in defaultBasciParame.allKeys) { [dic setObject:defaultBasciParame[parameKey] forKey:parameKey]; } return dic; } @end