NetManager.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. //
  2. // NetManager.m
  3. // LN_School
  4. //
  5. // Created by apple on 2017/4/6.
  6. // Copyright © 2017年 Danson. All rights reserved.
  7. //
  8. #import "NetManager.h"
  9. #import "AFNetworking.h"
  10. #import "DES3Util.h"
  11. //网络是否可以连接
  12. #import <SystemConfiguration/SystemConfiguration.h>
  13. #import <netdb.h>
  14. @implementation NetManager
  15. //判断网络是否连接
  16. + (BOOL) connectedToNetWork
  17. {
  18. return YES;//2017/10/9 临时处理
  19. // @try {
  20. // //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
  21. // struct sockaddr_in zeroAddress;
  22. // bzero(&zeroAddress, sizeof(zeroAddress));
  23. // zeroAddress.sin_len = sizeof(zeroAddress);
  24. // zeroAddress.sin_family = AF_INET;
  25. //
  26. // /**
  27. // * SCNetworkReachabilityRef: 用来保存创建测试连接返回的引用
  28. // *
  29. // * SCNetworkReachabilityCreateWithAddress: 根据传入的地址测试连接.
  30. // * 第一个参数可以为NULL或kCFAllocatorDefault
  31. // * 第二个参数为需要测试连接的IP地址,当为0.0.0.0时则可以查询本机的网络连接状态
  32. // * 同时返回一个引用必须在用完后释放
  33. // * PS: SCNetworkReachabilityCreateWithName: 这是个根据传入的网络测试连接,
  34. // * 第二个参数比如为“www.apple.com”,其他和上一个一样
  35. // *
  36. // * SCNetworkReachabilityGetFlags:这个函数用来获得测试连接的状态,
  37. // * 第一个参数为之前建立的测试连接的引用,
  38. // * 第二个参数用来保存获得的状态,
  39. // * 如果能获得状态则返回TRUE,否则返回FALSE。
  40. // *
  41. // */
  42. //
  43. // SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
  44. // SCNetworkReachabilityFlags flags;
  45. //
  46. // BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
  47. // CFRelease(defaultRouteReachability);
  48. //
  49. // if (!didRetrieveFlags) {
  50. // printf("Error. Could not recover network reachability flags");
  51. // return NO;
  52. // }
  53. //
  54. // /**
  55. // * kSCNetworkReachabilityFlagsReachable: 能够连接网络
  56. // * kSCNetworkReachabilityFlagsConnectionRequired: 能够连接网络,但是首先得建立连接过程
  57. // * kSCNetworkReachabilityFlagsIsWWAN: 判断是否通过蜂窝网覆盖的连接,
  58. // * 比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接
  59. // */
  60. // BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0);
  61. // BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0);
  62. //
  63. // return (isReachable && !needsConnection) ? YES : NO;
  64. // }
  65. // @catch (NSException *exception) {
  66. // return NO;
  67. // }
  68. }
  69. //生成带有签名的URL
  70. + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP
  71. {
  72. //生成带有签名的URL
  73. NSString *httpUrl = defUser.defaultHttp;
  74. if (!isOfficial) {
  75. httpUrl = defaultHttp2;
  76. }
  77. NSString *urlDefault = defaultHttpUrl;
  78. if ([urlP isEqualToString:@"getLoginIps"]) {
  79. httpUrl = @"http://app.lnjppt.com/appservice/";//该接口调学员端服务
  80. urlDefault = defaultCommonUrl;
  81. }
  82. // //公共请求
  83. // NSArray *commonArray = @[@""];
  84. // if ([commonArray containsObject:urlP]) {
  85. // urlDefault = defaultCommonUrl;
  86. // }
  87. NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒
  88. NSString *urlS = @"";
  89. if (dic == nil) {
  90. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]];
  91. if ([urlDefault isEqualToString:defaultCommonUrl]) {
  92. urlS = [urlS stringByReplacingOccurrencesOfString:@"tmsappservice" withString:@"appservice"];
  93. }
  94. }else{
  95. //添加key字段
  96. NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]];
  97. [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]];
  98. // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""];
  99. // // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""];
  100. // NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  101. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]];
  102. }
  103. return urlS;
  104. }
  105. + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic
  106. {
  107. NSMutableString *contentString =[NSMutableString string];
  108. NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic];
  109. NSArray *keys = [dict allKeys];
  110. //按字母顺序排序
  111. NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  112. return [obj1 compare:obj2 options:NSNumericSearch];
  113. }];
  114. //拼接字符串
  115. for (NSString *categoryId in sortedArray) {
  116. if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){
  117. if([categoryId isEqualToString:@"biz_content"]){
  118. NSError *error = nil;
  119. NSDictionary* bizDict = [dict objectForKey:@"biz_content"];
  120. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error];
  121. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
  122. NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding];
  123. NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"];
  124. [contentString appendFormat:@"biz_content=%@&",jsonString2];
  125. }else{
  126. [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]];
  127. }
  128. }
  129. }
  130. return contentString;
  131. }
  132. + (void)requestAnythingWithURL:(NSString *)urlString dictionary:(NSDictionary *)aDictionary dataArray:(NSArray *)dataArray completion:(MyBlockType)finishBlock
  133. {
  134. if (dataArray) {//有媒体数据上传的请求
  135. NSString *httpUrl = isOfficial == YES ? defUser.defaultHttp : defaultHttp2;
  136. NSString *defaultUpload = defaultUploadUrl;
  137. NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString];
  138. [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  139. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  140. afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
  141. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  142. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  143. afSessionManager.requestSerializer.timeoutInterval = 25;
  144. [afSessionManager POST:urlS parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  145. int k = 0;
  146. for (NSData *uplownData in dataArray) {
  147. NSString *typeString = [Tools typeForImageData:uplownData];
  148. NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString];
  149. NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString];
  150. k ++;
  151. [formData appendPartWithFileData:uplownData
  152. name:[NSString stringWithFormat:@"photo%d",k]
  153. fileName:fileType
  154. mimeType:mimeType];
  155. }
  156. } progress:^(NSProgress * _Nonnull uploadProgress) {
  157. //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress);
  158. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  159. //如果返回空的data 返回失败好了
  160. if (responseObject == nil) {
  161. NSDictionary *dic = nil;
  162. finishBlock(dic);
  163. return;
  164. }
  165. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  166. options:NSJSONReadingMutableContainers
  167. error:nil];
  168. //NSLog(@"上传图片-----><>%@----><>%@",urlS,dic);
  169. finishBlock(dic);
  170. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  171. //失败的时候 要把失败的事情传输回去
  172. NSDictionary *dic = nil;
  173. finishBlock(dic);
  174. }];
  175. }else{
  176. NSString *urlS = [NetManager getURLWithDict:aDictionary urlPre:urlString];
  177. NSLog(@"POST请求-------><>%@ \n-------><>%@ \n----",urlS,aDictionary);
  178. //设置请求管理器
  179. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  180. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  181. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  182. afSessionManager.requestSerializer.timeoutInterval = 15;
  183. [afSessionManager POST:urlS parameters:aDictionary headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  184. //请求成功
  185. //如果返回空的data 返回失败好了
  186. if (responseObject == nil) {
  187. NSDictionary *dic = nil;
  188. finishBlock(dic);
  189. return;
  190. }
  191. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  192. options:NSJSONReadingMutableContainers
  193. error:nil];
  194. NSLog(@"POST请求成功-------><>%@\n-------><>%@",urlS,dic);
  195. for (NSString *akey in dic.allKeys) {
  196. id obj = dic[akey];
  197. if ([obj isEqual:[NSNull null]]) {
  198. [dic setValue:@"" forKey:akey];
  199. }
  200. }
  201. finishBlock(dic);
  202. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  203. //失败的时候 要把失败的事情传输回去
  204. NSLog(@"POST请求失败-------><>%@ \n-------><>%@ \n-------><>%@",urlS,aDictionary,error);
  205. NSDictionary *dic = nil;
  206. finishBlock(dic);
  207. }];
  208. }
  209. }
  210. + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock
  211. {
  212. //生成请求加密后的url
  213. NSString *urlS = [NetManager getURLWithDict:nil urlPre:urlString];
  214. //设置请求管理器
  215. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  216. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  217. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  218. [afSessionManager GET:urlS parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  219. //如果返回空的data 返回失败好了
  220. if (responseObject == nil) {
  221. NSDictionary *dic = nil;
  222. finishBlock(dic);
  223. return;
  224. }
  225. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  226. options:NSJSONReadingMutableContainers
  227. error:nil];
  228. // NSLog(@"GET请求成功-------><>%@ \n-------><>%@",urlS,dic);
  229. finishBlock(dic);
  230. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  231. // NSLog(@"GET请求失败-------><>%@",urlS);
  232. //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"}
  233. NSDictionary *dic = nil;
  234. finishBlock(dic);
  235. }];
  236. }
  237. @end