NetManager.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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;
  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. //公共请求
  79. NSArray *commonArray = @[@"getLoginIps"];
  80. if ([commonArray containsObject:urlP]) {
  81. urlDefault = defaultCommonUrl;
  82. }
  83. NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒
  84. NSString *urlS = @"";
  85. if (dic == nil) {
  86. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=jsjp",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]];
  87. if ([urlDefault isEqualToString:defaultCommonUrl]) {
  88. urlS = [urlS stringByReplacingOccurrencesOfString:@"tmsappservice" withString:@"appservice"];
  89. }
  90. }else{
  91. //添加key字段
  92. NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]];
  93. [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]];
  94. // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""];
  95. // // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""];
  96. // NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  97. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios&v=jsjp",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]];
  98. }
  99. return urlS;
  100. }
  101. + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic
  102. {
  103. NSMutableString *contentString =[NSMutableString string];
  104. NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic];
  105. NSArray *keys = [dict allKeys];
  106. //按字母顺序排序
  107. NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  108. return [obj1 compare:obj2 options:NSNumericSearch];
  109. }];
  110. //拼接字符串
  111. for (NSString *categoryId in sortedArray) {
  112. if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){
  113. if([categoryId isEqualToString:@"biz_content"]){
  114. NSError *error = nil;
  115. NSDictionary* bizDict = [dict objectForKey:@"biz_content"];
  116. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error];
  117. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
  118. NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding];
  119. NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"];
  120. [contentString appendFormat:@"biz_content=%@&",jsonString2];
  121. }else{
  122. [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]];
  123. }
  124. }
  125. }
  126. return contentString;
  127. }
  128. + (void)requestAnythingWithURL:(NSString *)urlString dictionary:(NSDictionary *)aDictionary dataArray:(NSArray *)dataArray completion:(MyBlockType)finishBlock
  129. {
  130. if (dataArray) {//有媒体数据上传的请求
  131. NSString *httpUrl = isOfficial == YES ? defUser.defaultHttp : defaultHttp2;
  132. NSString *defaultUpload = defaultUploadUrl;
  133. NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString];
  134. [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  135. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  136. afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
  137. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  138. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  139. afSessionManager.requestSerializer.timeoutInterval = 15;
  140. [afSessionManager POST:urlS parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  141. int k = 0;
  142. for (NSData *uplownData in dataArray) {
  143. NSString *typeString = [Tools typeForImageData:uplownData];
  144. NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString];
  145. NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString];
  146. k ++;
  147. [formData appendPartWithFileData:uplownData
  148. name:[NSString stringWithFormat:@"photo%d",k]
  149. fileName:fileType
  150. mimeType:mimeType];
  151. }
  152. } progress:^(NSProgress * _Nonnull uploadProgress) {
  153. //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress);
  154. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  155. //如果返回空的data 返回失败好了
  156. if (responseObject == nil) {
  157. NSDictionary *dic = nil;
  158. finishBlock(dic);
  159. return;
  160. }
  161. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  162. options:NSJSONReadingMutableContainers
  163. error:nil];
  164. //NSLog(@"上传图片-----><>%@----><>%@",urlS,dic);
  165. finishBlock(dic);
  166. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  167. //失败的时候 要把失败的事情传输回去
  168. NSDictionary *dic = nil;
  169. finishBlock(dic);
  170. }];
  171. }else{
  172. NSArray * noHudArr = @[@"getStatistics",@"saveAppImei"];
  173. //无媒体数据上传的请求
  174. if ([NSThread isMainThread] && ![noHudArr containsObject:urlString]) {
  175. RemoveHUD();//@RQ-MARK
  176. ShowHUD();
  177. }
  178. NSString *urlS = [NetManager getURLWithDict:aDictionary urlPre:urlString];
  179. // NSLog(@"POST请求-------><>%@ \n-------><>%@ \n----",urlS,aDictionary);
  180. //设置请求管理器
  181. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  182. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  183. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  184. afSessionManager.requestSerializer.timeoutInterval = 30;
  185. [afSessionManager POST:urlS parameters:aDictionary progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  186. //请求成功
  187. RemoveHUD();
  188. //如果返回空的data 返回失败好了
  189. if (responseObject == nil) {
  190. NSDictionary *dic = nil;
  191. finishBlock(dic);
  192. return;
  193. }
  194. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  195. options:NSJSONReadingMutableContainers
  196. error:nil];
  197. NSLog(@"POST请求成功-------><>%@ \n-------><>%@ \n-------><>%@",urlS,aDictionary,dic);
  198. for (NSString *akey in dic.allKeys) {
  199. id obj = dic[akey];
  200. if ([obj isEqual:[NSNull null]]) {
  201. [dic setValue:@"" forKey:akey];
  202. }
  203. }
  204. finishBlock(dic);
  205. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  206. //失败的时候 要把失败的事情传输回去
  207. RemoveHUD();
  208. NSLog(@"POST请求失败-------><>%@ \n-------><>%@ \n-------><>%@",urlS,aDictionary,error);
  209. NSDictionary *dic = nil;
  210. finishBlock(dic);
  211. }];
  212. }
  213. }
  214. + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock
  215. {
  216. //生成请求加密后的url
  217. NSString *urlS = [NetManager getURLWithDict:nil urlPre:urlString];
  218. //设置请求管理器
  219. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  220. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  221. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  222. //@RQ-MARK
  223. // urlS = @"http://fj.jppt.com.cn/appservice/common/getLoginIps?ts=1539681232265&user=ios&v=jsjp";
  224. [afSessionManager GET:urlS parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  225. //如果返回空的data 返回失败好了
  226. if (responseObject == nil) {
  227. NSDictionary *dic = nil;
  228. finishBlock(dic);
  229. return;
  230. }
  231. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  232. options:NSJSONReadingMutableContainers
  233. error:nil];
  234. NSLog(@"GET请求成功-------><>%@ \n-------><>%@",urlS,dic);
  235. finishBlock(dic);
  236. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  237. NSLog(@"GET请求失败-------><>%@",urlS);
  238. //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"}
  239. NSDictionary *dic = nil;
  240. finishBlock(dic);
  241. }];
  242. }
  243. @end