1 #import "HttpsManager.h" 2 3 @implementation HttpsManager 4 #pragma mark - 创建请求者 5 +(AFHTTPSessionManager *)manager 6 { 7 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 8 // 超时时间 9 manager.requestSerializer.timeoutInterval = kTimeOutInterval; 10 11 // 声明上传的是json格式的参数,需要你和后台约定好,不然会出现后台无法获取到你上传的参数问题 12 manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上传普通格式 13 // manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上传JSON格式 14 15 // 声明获取到的数据格式 16 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不会解析,数据是data,需要自己解析 17 // manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN会JSON解析返回的数据 18 // 个人建议还是自己解析的比较好,有时接口返回的数据不合格会报3840错误,大致是AFN无法解析返回来的数据 19 return manager; 20 } 21 22 + (void)getUserCarShopAndSalesDataForSalesWithUserId:(NSString *)userId date:(NSString *)date selectAreaType:(NSString *)areaType Success:(SuccessBlock)success fail:(AFNErrorBlock)fail 23 { 24 // get请求也可以直接将参数放在字典里,AFN会自己讲参数拼接在url的后面,不需要自己凭借 25 NSDictionary *param = @{@"user_id":userId, @"sale_date":date, @"accessToken":@"e9c0e60318ebd07ec2fe", @"area_type":areaType}; 26 // 创建请求类 27 AFHTTPSessionManager *manager = [self manager]; 28 [manager GET:@"http://pm.yunhan-china.com/index.php/Api_sale/sales_get" parameters:param progress:^(NSProgress * _Nonnull downloadProgress) { 29 // 这里可以获取到目前数据请求的进度 30 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 31 // 请求成功 32 if(responseObject){ 33 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; 34 success(dict,YES); 35 } else { 36 success(@{@"msg":@"暂无数据"}, NO); 37 } 38 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 39 // 请求失败 40 fail(error); 41 }]; 42 } 43 44 + (void)loginWithUserAccount:(NSString *)account password:(NSString *)password success:(SuccessBlock)success fail:(AFNErrorBlock)fail 45 { 46 // 将请求参数放在请求的字典里 47 NSDictionary *param = @{@"phoneNumber":account, @"password":@"f379eaf3c831b04de153469d1bec345e"}; 48 // 创建请求类 49 AFHTTPSessionManager *manager = [self manager]; 50 [manager POST:@"http://pm.yunhan-china.com/index.php/api_common/login" 51 parameters:param 52 progress:^(NSProgress * _Nonnull uploadProgress) { 53 // 这里可以获取到目前数据请求的进度 54 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 55 // 请求成功 56 if(responseObject){ 57 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; 58 success(dict,YES); 59 } else { 60 success(@{@"msg":@"暂无数据"}, NO); 61 } 62 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 63 // 请求失败 64 fail(error); 65 }]; 66 67 } 68 69 - (void)downLoadWithUrlString:(NSString *)urlString 70 { 71 // 1.创建管理者对象 72 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 73 // 2.设置请求的URL地址 74 NSURL *url = [NSURL URLWithString:urlString]; 75 // 3.创建请求对象 76 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 77 // 4.下载任务 78 NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { 79 // 下载进度 80 NSLog(@"当前下载进度为:%lf", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount); 81 } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { 82 // 下载地址 83 NSLog(@"默认下载地址%@",targetPath); 84 // 设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象 85 NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; 86 return [NSURL fileURLWithPath:filePath]; // 返回的是文件存放在本地沙盒的地址 87 } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { 88 // 下载完成调用的方法 89 NSLog(@"%@---%@", response, filePath); 90 }]; 91 // 5.启动下载任务 92 [task resume]; 93 } 94 95 - (void)uploadWithUser:(NSString *)userId UrlString:(NSString *)urlString upImg:(UIImage *)upImg 96 { 97 // 创建管理者对象 98 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 99 // 参数 100 NSDictionary *param = @{@"user_id":userId}; 101 [manager POST:urlString parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { 102 /******** 1.上传已经获取到的img *******/ 103 // 把图片转换成data 104 NSData *data = UIImagePNGRepresentation(upImg); 105 // 拼接数据到请求题中 106 [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"]; 107 /******** 2.通过路径上传沙盒或系统相册里的图片 *****/ 108 // [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil]; 109 110 } progress:^(NSProgress * _Nonnull uploadProgress) { 111 // 打印上传进度 112 NSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount); 113 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 114 //请求成功 115 NSLog(@"请求成功:%@",responseObject); 116 117 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 118 //请求失败 119 NSLog(@"请求失败:%@",error); 120 }]; 121 } 122 123 - (void)AFNetworkStatus{ 124 125 //1.创建网络监测者 126 AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; 127 128 /*枚举里面四个状态 分别对应 未知 无网络 数据 WiFi 129 typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { 130 AFNetworkReachabilityStatusUnknown = -1, 未知 131 AFNetworkReachabilityStatusNotReachable = 0, 无网络 132 AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窝数据网络 133 AFNetworkReachabilityStatusReachableViaWiFi = 2, WiFi 134 }; 135 */ 136 137 [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 138 //这里是监测到网络改变的block 可以写成switch方便 139 //在里面可以随便写事件 140 switch (status) { 141 case AFNetworkReachabilityStatusUnknown: 142 NSLog(@"未知网络状态"); 143 break; 144 case AFNetworkReachabilityStatusNotReachable: 145 NSLog(@"无网络"); 146 break; 147 148 case AFNetworkReachabilityStatusReachableViaWWAN: 149 NSLog(@"蜂窝数据网"); 150 break; 151 152 case AFNetworkReachabilityStatusReachableViaWiFi: 153 NSLog(@"WiFi网络"); 154 155 break; 156 157 default: 158 break; 159 } 160 161 }] ; 162 } 163 164 165 @end