123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- //
- // 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 <SystemConfiguration/SystemConfiguration.h>
- #import <netdb.h>
- @implementation NetManager
- //判断网络是否连接
- + (BOOL) connectedToNetWork
- {
- return YES;
- // @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;
-
- //公共请求
- NSArray *commonArray = @[@"getLoginIps"];
-
- 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=jsjp",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=jsjp",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 = 15;
-
- [afSessionManager POST:urlS parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _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{
-
- NSArray * noHudArr = @[@"getStatistics",@"saveAppImei"];
-
- //无媒体数据上传的请求
- if ([NSThread isMainThread] && ![noHudArr containsObject:urlString]) {
- RemoveHUD();//@RQ-MARK
- ShowHUD();
- }
-
- 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 = 30;
-
- [afSessionManager POST:urlS parameters:aDictionary progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
- //请求成功
- RemoveHUD();
- //如果返回空的data 返回失败好了
- if (responseObject == nil) {
- NSDictionary *dic = nil;
- finishBlock(dic);
- return;
- }
- NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
- options:NSJSONReadingMutableContainers
- error:nil];
-
- NSLog(@"POST请求成功-------><>%@ \n-------><>%@ \n-------><>%@",urlS,aDictionary,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) {
- //失败的时候 要把失败的事情传输回去
- RemoveHUD();
- 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];
- //@RQ-MARK
- // urlS = @"http://fj.jppt.com.cn/appservice/common/getLoginIps?ts=1539681232265&user=ios&v=jsjp";
- [afSessionManager GET:urlS parameters: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
|