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