| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- //
- // NetworkRequestManager.m
- // MingMen
- //
- // Created by 罗云飞 on 2017/3/13.
- // Copyright © 2017年 罗云飞. All rights reserved.
- //
- #import "NetworkRequestManager.h"
- #include <netinet/in.h>
- #import "AFNetworking.h"
- #import "AFNetworkActivityIndicatorManager.h"
- @implementation NetworkRequestManager
- static BOOL isNetwork;
- #pragma mark - 有无网络
- +(BOOL) connectedToNetwork
- {
-
- return isNetwork;
-
- /* 感觉sockaddr_in 不兼容IPV6 也不会写sockaddr_in6
- struct sockaddr_in zeroAddress;
- bzero(&zeroAddress, sizeof(zeroAddress));
- zeroAddress.sin_len = sizeof(zeroAddress);
- zeroAddress.sin_family = AF_INET;
-
- 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\n");
- return NO;
- }
-
- BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0);
- BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0);
- return (isReachable && !needsConnection) ? YES : NO;
- */
- }
- #pragma mark - 观察网络状态
- + (void)observeNetworkStatus
- {
- AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
-
- [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
-
- switch (status)
- {
- case AFNetworkReachabilityStatusUnknown:
- isNetwork = YES;
- NSLog(@"未知网络");
- break;
- case AFNetworkReachabilityStatusNotReachable:
- isNetwork = NO;
- NSLog(@"无网络");
- break;
- case AFNetworkReachabilityStatusReachableViaWWAN:
- isNetwork = YES;
- NSLog(@"正在使用手机流量");
- break;
- case AFNetworkReachabilityStatusReachableViaWiFi:
- isNetwork = YES;
- NSLog(@"正在使用手机WIFI");
- break;
- }
- }];
-
- [manager startMonitoring];
- }
- #pragma mark - GET请求
- + (void)requestGetWithInterfacePrefix:(NSString*)_ifPrefix parameters:(id)parameters onSuccess:(ResponseTask)succeed onFailure:(CallbackTask)failed
- {
- //接入参数由协议参数和业务参数共同组成,业务接口中会介绍每个业务接口的输入/输出参数
- //为了确保数据传输过程中的数据真实性和完整性,我们需要对数据进行签名校验。
- //HTTP请求中传递的参数中,需要对token、安全码、设备编号进行MD5加密处理,构成待签名数据 appKey
-
- /*
- NSString *token = [NewUtils sharedInstance].token;
- NSString *securityCode = [NewUtils sharedInstance].securityCode;
- NSString *appKey =[NewUtils md5:[NSString stringWithFormat:@"%@%@%@",token,securityCode,deviceNumber]];
- [parameters safeSetObject:@"json" forKey:@"format"];
- [parameters safeSetObject:VersionNumber forKey:@"v"];
- [parameters safeSetObject:[NewUtils get_publicInterface_time] forKey:@"timestamp"];
- [parameters safeSetObject:appKey forKey:@"appKey"];
- [parameters safeSetObject:securityCode forKey:@"securityCode"];
- */
-
- /*
- //字符串进行UTF-8编码:输出str字符串的UTF-8格式
- [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- //解码:把str字符串以UTF-8规则进行解码
- [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- */
- NSString *serverUrl = [NSString stringWithFormat:@"%@%@",SERVER_URL,_ifPrefix];
- if ([UserEntity sharedInstance].token.length>0 && ![[UserEntity sharedInstance].token isKindOfClass:[NSNull class]]) {
- [parameters safeSetObject:[UserEntity sharedInstance].token forKey:@"token"];
- }
-
- //NSLog(@"上传参数: %@",parameters);
-
- AFHTTPSessionManager *manager = [self createAFHTTPSessionManager];
- [manager GET:serverUrl parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
-
- //这里面是进度
-
- } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
-
- if ([NewLogSwitch isEqualToString:@"0"] && [SERVER_URL isEqualToString:@"http://119.23.152.19/mmapp/"]) {
- /*
- 这段代码写在AFNetWorking库里 那里面打印不了值 故用NSUserDefaults那边存 这边取
- if ([[mutableRequest.URL absoluteString] rangeOfString:@"http://119.23.152.19/mmapp/"].location!=NSNotFound)
- {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setValue:[mutableRequest.URL absoluteString] forKey:@"NewNetworkRequestLink"];
- [defaults synchronize];
- }
- */
- NSLog(@"接口链接: %@",[[NSUserDefaults standardUserDefaults] valueForKey:@"NewNetworkRequestLink"]);
- }
-
- if (succeed) {
- if (responseObject) {
- //本来AF直接返回的就是NSDictionary了,因为之前写的代码直接是解Data,所以为了兼容转成Data然后使用的时候又转成NSDictionary
- NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
- succeed(responseData);
- }else{
- if (failed) {
- failed();
- }
- }
- }
-
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
-
- if (failed) {
- failed();
- }
-
- }];
-
- }
- #pragma mark - Post请求
- + (void)requestPostWithInterfacePrefix:(NSString*)_ifPrefix parameters:(id)parameters onSuccess:(ResponseTask)succeed onFailure:(CallbackTask)failed
- {
- NSString *serverUrl = [NSString stringWithFormat:@"%@%@",SERVER_URL,_ifPrefix];
- // NSString *serverUrl = [NSString stringWithFormat:@"%@%@",@"http://192.168.0.101:8080/mmapp/",_ifPrefix];
-
- //NSLog(@"上传参数: %@",parameters);
-
- AFHTTPSessionManager *manager = [self createAFHTTPSessionManager];
- [manager POST:serverUrl parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
-
- //这里面是进度
-
- } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
-
- if ([NewLogSwitch isEqualToString:@"0"] && [SERVER_URL isEqualToString:@"http://119.23.152.19/mmapp/"]) {
-
- /*
- 这段代码写在AFNetWorking库里 那里面打印不了值 故用NSUserDefaults那边存 这边取
- if ([[mutableRequest.URL absoluteString] rangeOfString:@"http://119.23.152.19/mmapp/"].location!=NSNotFound)
- {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setValue:[mutableRequest.URL absoluteString] forKey:@"NewNetworkRequestLink"];
- [defaults synchronize];
- }
- */
- NSLog(@"接口链接: %@",[[NSUserDefaults standardUserDefaults] valueForKey:@"NewNetworkRequestLink"]);
-
- }
-
- if (succeed) {
- if (responseObject) {
- //本来AF直接返回的就是NSDictionary了,因为之前写的代码直接是解Data,所以为了兼容转成Data然后使用的时候又转成NSDictionary
- NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
- succeed(responseData);
- }else{
- if (failed) {
- failed();
- }
- }
- }
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
-
- if (failed) {
- failed();
- }
- }];
- }
- #pragma mark - 设置AFHTTPSessionManager相关属性
- + (AFHTTPSessionManager *)createAFHTTPSessionManager
- {
- //打开状态栏的等待菊花
- [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
-
- AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
- //设置请求的超时时间
- manager.requestSerializer.timeoutInterval = 60.f;
- //设置请求参数的类型:HTTP (AFJSONRequestSerializer,AFHTTPRequestSerializer)
- manager.requestSerializer = [AFHTTPRequestSerializer serializer];
- //设置服务器返回结果的类型:JSON (AFJSONResponseSerializer,AFHTTPResponseSerializer)
- manager.responseSerializer = [AFJSONResponseSerializer serializer];
- //NSURLRequest添加请求头
- //[manager.requestSerializer setValue:@"" forHTTPHeaderField:@"token"];
-
- manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"application/json",
- @"text/html",
- @"text/json",
- @"text/plain",
- @"text/javascript",
- @"text/xml",
- @"image/*"]];
- return manager;
- }
- @end
|