// // NetManager.m // LN_School // // Created by apple on 2017/4/6. // Copyright © 2017年 Danson. All rights reserved. // #import "NetManager.h" #import "AFNetworking.h" #import "DES3Util.h" //网络是否可以连接 #import #import @implementation NetManager //判断网络是否连接 + (BOOL) connectedToNetWork { return YES;//2017/10/9 临时处理 // @try { // //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态 // struct sockaddr_in zeroAddress; // bzero(&zeroAddress, sizeof(zeroAddress)); // zeroAddress.sin_len = sizeof(zeroAddress); // zeroAddress.sin_family = AF_INET; // // /** // * SCNetworkReachabilityRef: 用来保存创建测试连接返回的引用 // * // * SCNetworkReachabilityCreateWithAddress: 根据传入的地址测试连接. // * 第一个参数可以为NULL或kCFAllocatorDefault // * 第二个参数为需要测试连接的IP地址,当为0.0.0.0时则可以查询本机的网络连接状态 // * 同时返回一个引用必须在用完后释放 // * PS: SCNetworkReachabilityCreateWithName: 这是个根据传入的网络测试连接, // * 第二个参数比如为“www.apple.com”,其他和上一个一样 // * // * SCNetworkReachabilityGetFlags:这个函数用来获得测试连接的状态, // * 第一个参数为之前建立的测试连接的引用, // * 第二个参数用来保存获得的状态, // * 如果能获得状态则返回TRUE,否则返回FALSE。 // * // */ // // SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); // SCNetworkReachabilityFlags flags; // // BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); // CFRelease(defaultRouteReachability); // // if (!didRetrieveFlags) { // printf("Error. Could not recover network reachability flags"); // return NO; // } // // /** // * kSCNetworkReachabilityFlagsReachable: 能够连接网络 // * kSCNetworkReachabilityFlagsConnectionRequired: 能够连接网络,但是首先得建立连接过程 // * kSCNetworkReachabilityFlagsIsWWAN: 判断是否通过蜂窝网覆盖的连接, // * 比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接 // */ // BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); // BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); // // return (isReachable && !needsConnection) ? YES : NO; // } // @catch (NSException *exception) { // return NO; // } } //生成带有签名的URL + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP { //生成带有签名的URL NSString *httpUrl = defUser.defaultHttp; if (!isOfficial) { httpUrl = defaultHttp2; } NSString *urlDefault = defaultHttpUrl; if ([urlP isEqualToString:@"getLoginIps"]) { httpUrl = @"http://app.lnjppt.com/appservice/";//该接口调学员端服务 urlDefault = defaultCommonUrl; } // //公共请求 // NSArray *commonArray = @[@""]; // if ([commonArray containsObject:urlP]) { // urlDefault = defaultCommonUrl; // } NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒 NSString *urlS = @""; if (dic == nil) { urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]]; if ([urlDefault isEqualToString:defaultCommonUrl]) { urlS = [urlS stringByReplacingOccurrencesOfString:@"tmsappservice" withString:@"appservice"]; } }else{ //添加key字段 NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]]; [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]]; // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""]; // // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""]; // NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""]; urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]]; } return urlS; } + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic { NSMutableString *contentString =[NSMutableString string]; NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic]; NSArray *keys = [dict allKeys]; //按字母顺序排序 NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; //拼接字符串 for (NSString *categoryId in sortedArray) { if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){ if([categoryId isEqualToString:@"biz_content"]){ NSError *error = nil; NSDictionary* bizDict = [dict objectForKey:@"biz_content"]; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error]; NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData]; NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]; NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"]; [contentString appendFormat:@"biz_content=%@&",jsonString2]; }else{ [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]]; } } } return contentString; } + (void)requestAnythingWithURL:(NSString *)urlString dictionary:(NSDictionary *)aDictionary dataArray:(NSArray *)dataArray completion:(MyBlockType)finishBlock { if (dataArray) {//有媒体数据上传的请求 NSString *httpUrl = isOfficial == YES ? defUser.defaultHttp : defaultHttp2; NSString *defaultUpload = defaultUploadUrl; NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString]; [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; afSessionManager.requestSerializer.timeoutInterval = 25; [afSessionManager POST:urlS parameters:nil headers:nil constructingBodyWithBlock:^(id _Nonnull formData) { int k = 0; for (NSData *uplownData in dataArray) { NSString *typeString = [Tools typeForImageData:uplownData]; NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString]; NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString]; k ++; [formData appendPartWithFileData:uplownData name:[NSString stringWithFormat:@"photo%d",k] fileName:fileType mimeType:mimeType]; } } progress:^(NSProgress * _Nonnull uploadProgress) { //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //如果返回空的data 返回失败好了 if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; //NSLog(@"上传图片-----><>%@----><>%@",urlS,dic); finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //失败的时候 要把失败的事情传输回去 NSDictionary *dic = nil; finishBlock(dic); }]; }else{ NSString *urlS = [NetManager getURLWithDict:aDictionary urlPre:urlString]; NSLog(@"POST请求-------><>%@ \n-------><>%@ \n----",urlS,aDictionary); //设置请求管理器 AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; afSessionManager.requestSerializer.timeoutInterval = 15; [afSessionManager POST:urlS parameters:aDictionary headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功 //如果返回空的data 返回失败好了 if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; NSLog(@"POST请求成功-------><>%@\n-------><>%@",urlS,dic); for (NSString *akey in dic.allKeys) { id obj = dic[akey]; if ([obj isEqual:[NSNull null]]) { [dic setValue:@"" forKey:akey]; } } finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //失败的时候 要把失败的事情传输回去 NSLog(@"POST请求失败-------><>%@ \n-------><>%@ \n-------><>%@",urlS,aDictionary,error); NSDictionary *dic = nil; finishBlock(dic); }]; } } + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock { //生成请求加密后的url NSString *urlS = [NetManager getURLWithDict:nil urlPre:urlString]; //设置请求管理器 AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager]; afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; [afSessionManager GET:urlS parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //如果返回空的data 返回失败好了 if (responseObject == nil) { NSDictionary *dic = nil; finishBlock(dic); return; } NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; // NSLog(@"GET请求成功-------><>%@ \n-------><>%@",urlS,dic); finishBlock(dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // NSLog(@"GET请求失败-------><>%@",urlS); //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"} NSDictionary *dic = nil; finishBlock(dic); }]; } @end