//
//? HttpTool.h
//? AFNetWorking 3.0 工具類
//
//? Created by peony on 18/1/21.
//? Copyright (c) 2018年 zsl. All rights reserved.
//
#import
@class FormData;
@interfaceHttpTool :NSObject
/**
?*? 發送一個GET請求
?*
?*? @param url? ? 請求路徑
?*? @param params? 請求參數
?*? @param success 請求成功后的回調(請將請求成功后想做的事情寫到這個block中)
?*? @param failure 請求失敗后的回調(請將請求失敗后想做的事情寫到這個block中)
?*/
+ (void)get:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(idjson))success failure:(void(^)(NSError*error))failure;
/**
?*? 發送一個POST請求
?*
?*? @param url? ? 請求路徑
?*? @param params? 請求參數
?*? @param success 請求成功后的回調(請將請求成功后想做的事情寫到這個block中)
?*? @param failure 請求失敗后的回調(請將請求失敗后想做的事情寫到這個block中)
?*/
+ (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(idjson))success failure:(void(^)(NSError*error))failure;
/**
?*? 發送一個POST文件請求
?*
?*? @param url? ? ? 請求路徑
?*? @param params? 請求參數
?*? @param dataSource 文件參數
?*? @param success? 請求成功后的回調(請將請求成功后想做的事情寫到這個block中)
?*? @param failure? 請求失敗后的回調(請將請求失敗后想做的事情寫到這個block中)
?*/
+ (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session dataSource:(FormData*)dataSource success:(void(^)(idjson))success failure:(void(^)(NSError*error))failure;
/**
?多張圖片上傳
?@param url 接口
?@param params 參數
?@param images 圖片數組
?@param success 成功狀態
?@param failure 失敗狀態
?*/
?+ (void)postMoreDataWithUrl:(NSString*)url Params:(NSDictionary*)params ImageParams:(NSString*)imageParams Session:(NSString*)session? ImageArray:(NSMutableArray*)images Success:(void(^)(idjson))success Failure:(void(^)(NSError*error))failure;
@end
/**
?*? 用來封裝文件數據的模型
?*/
@interfaceFormData :NSObject
/**
?*? 文件數據
?*/
@property(nonatomic, strong)NSData * data;
/**
?*? 參數名
?*/
@property(nonatomic, copy)NSString *paramsName;
/**
?*? 文件名
?*/
@property(nonatomic, copy)NSString *filename;
/**
?*? 文件類型
?*/
@property(nonatomic, copy)NSString *mimeType;
@end
//
//? HttpTool.h
//? AFNetWorking 3.0 工具類
//
//? Created by peony on 15/7/21.
//? Copyright (c) 2015年 zsl. All rights reserved.
//
#import "HttpTool.h"
#import "AFNetworking.h"
@interface HttpTool ()
@end
@implementation HttpTool
/**
?*? 發送一個GET文件請求
?*
?*? @param url? ? ? 請求路徑
?*? @param params? 請求參數
?*? @param success? 請求成功后的回調(請將請求成功后想做的事情寫到這個block中)
?*? @param failure? 請求失敗后的回調(請將請求失敗后想做的事情寫到這個block中)
?*/
+ (void)get:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(id))success failure:(void(^)(NSError*))failure {
? ? // 1.獲得請求管理者
? ? AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
? ? [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];
? ? //[mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
? ? mgr.requestSerializer = [AFJSONRequestSerializer serializer];
? ? //申明返回的結果是json類型
? ? mgr.responseSerializer = [AFJSONResponseSerializer serializer];
? ? // 2.發送GET請求
? ? [mgrGET:urlparameters:paramsprogress:^(NSProgress*_NonnulldownloadProgress) {
? ? }success:^(NSURLSessionDataTask*_Nonnulltask,id? _NullableresponseObject) {
? ? ? ? NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
? ? ? ? NSString*cookieStr = response.allHeaderFields[COOKIE];
? ? ? ? if(cookieStr !=nil) {
? ? ? ? ? ? // 根據cookie中的內容字符串用“; ”來分割出cookie
? ? ? ? ? ? NSArray*result = [cookieStrcomponentsSeparatedByString:@"; "];
? ? ? ? ? ? NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
? ? ? ? ? ? OMGLog(@"cookieStr=======>%@",result[0]);
? ? ? ? ? ? [userDefaultssetObject:result[0]forKey:COOKIE];
? ? ? ? ? ? [userDefaultssynchronize];
? ? ? ? }
? ? ? ? if(success) {
? ? ? ? ? ? success(responseObject);
? ? ? ? }
? ? }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
? ? ? ? if(failure) {
? ? ? ? ? ? failure(error);
? ? ? ? ? ? [SVProgressHUD showErrorWithStatus:@"連接服務器超時"];
? ? ? ? }
? ? }];
}
/**
?*? 發送一個POST請求
?*
?*? @param url? ? ? 請求路徑
?*? @param params? 請求參數
?*? @param success? 請求成功后的回調(請將請求成功后想做的事情寫到這個block中)
?*? @param failure? 請求失敗后的回調(請將請求失敗后想做的事情寫到這個block中)
?*/
+ (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(id))success failure:(void(^)(NSError*))failure {
? ? // 1.獲得請求管理者
? ? AFHTTPSessionManager * mgr = [AFHTTPSessionManager manager];
? ? [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];
? ? [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
?? ? mgr.requestSerializer = [AFJSONRequestSerializer serializer];
?? ? //申明返回的結果是json類型
?? ? mgr.responseSerializer = [AFJSONResponseSerializer serializer];
? ? // 2.發送POST請求
? ? [mgrPOST:urlparameters:paramsprogress:^(NSProgress*_NonnulluploadProgress) {
? ? }success:^(NSURLSessionDataTask*_Nonnulltask,id? _NullableresponseObject) {
? ? ? ? NSHTTPURLResponse * response = (NSHTTPURLResponse *)task.response;
? ? ? ? NSString*cookieStr = response.allHeaderFields[COOKIE];
? ? ? ? if(cookieStr !=nil) {
? ? ? ? ? ? NSArray*result = [cookieStrcomponentsSeparatedByString:@"; "];
? ? ? ? ? ? NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
? ? ? ? ? ? OMGLog(@"cookieStr=======>%@",result[0]);
? ? ? ? ? ? [userDefaultssetObject:result[0]forKey:COOKIE];
? ? ? ? }
? ? ? ? if(success) {
? ? ? ? ? ? success(responseObject);
? ? ? ? }
? ? }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
? ? ? ? if(failure) {
? ? ? ? ? ? failure(error);
? ? ? ? ? ? [SVProgressHUD showErrorWithStatus:@"連接服務器超時"];
? ? ? ? }
? ? }];
}
/**
?*? 發送單個POST文件請求
?*
?*? @param url? ? ? 請求路徑
?*? @param params? 請求參數
?*? @param dataSource 文件參數
?*? @param success? 請求成功后的回調(請將請求成功后想做的事情寫到這個block中)
?*? @param failure? 請求失敗后的回調(請將請求失敗后想做的事情寫到這個block中)
?*/
+ (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session dataSource:(FormData*)dataSource success:(void(^)(id))success failure:(void(^)(NSError*))failure {
? ? // 1.獲得請求管理者
? ? AFHTTPSessionManager * mgr = [AFHTTPSessionManager manager];
? ? [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];
? ? [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
? ? mgr.requestSerializer = [AFJSONRequestSerializer serializer];
? ? //申明返回的結果是json類型
? ? mgr.responseSerializer = [AFJSONResponseSerializer serializer];
? ? // 2.請求內容
? ? [mgrPOST:url parameters:params constructingBodyWithBlock:^(id? _Nonnull formData) {
? ? ? ? [formDataappendPartWithFileData:dataSource.data name:dataSource.paramsName fileName:dataSource.filename mimeType:dataSource.mimeType];
? ? }progress:^(NSProgress*_NonnulluploadProgress) {
? ? }success:^(NSURLSessionDataTask*_Nonnulltask,id? _NullableresponseObject) {
? ? ? ? NSHTTPURLResponse * response = (NSHTTPURLResponse *)task.response;
? ? ? ? NSString*cookieStr = response.allHeaderFields[COOKIE];
? ? ? ? if(cookieStr !=nil) {
? ? ? ? ? ? NSArray*result = [cookieStrcomponentsSeparatedByString:@"; "];
? ? ? ? ? ? NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
? ? ? ? ? ? OMGLog(@"cookieStr=======>%@",result[0]);
? ? ? ? ? ? [userDefaultssetObject:result[0]forKey:COOKIE];
? ? ? ? }
? ? ? ? if(success) {
? ? ? ? ? ? success(responseObject);
? ? ? ? }
? ? }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
? ? ? ? if(failure) {
? ? ? ? ? ? failure(error);
? ? ? ? ? ? [SVProgressHUD showErrorWithStatus:@"服務器異常"];
? ? ? ? }
? ? }];
}
/**
?多張圖片上傳
?@param url 接口
?@param params 參數
?@param images 圖片數組
?@param success 成功狀態
?@param failure 失敗狀態
?*/
?+ (void)postMoreDataWithUrl:(NSString*)url Params:(NSDictionary*)params ImageParams:(NSString*)imageParams Session:(NSString*)session? ImageArray:(NSMutableArray*)images Success:(void(^)(idjson))success Failure:(void(^)(NSError*error))failure {
? ? AFHTTPSessionManager * mgr = [AFHTTPSessionManager manager];
? ? [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];
? ? [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
? ? mgr.requestSerializer = [AFJSONRequestSerializer serializer];
? ? //申明返回的結果是json類型
? ? mgr.responseSerializer = [AFJSONResponseSerializer serializer];
? ? [mgrPOST:url parameters:params constructingBodyWithBlock:^(id? _Nonnull formData) {
? ? ? ? for(UIImage*imageinimages) {
? ? ? ? ? ? // 圖片太大會上傳不到服務器上面去
? ? ? ? ? ? NSData*imageData =UIImageJPEGRepresentation(image,0.1);;
? ? ? ? ? ? // 在網絡開發中,上傳文件時,是文件不允許被覆蓋,文件重名
? ? ? ? ? ? // 要解決此問題,
? ? ? ? ? ? // 可以在上傳時使用當前的系統事件作為文件名
? ? ? ? ? ? NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
? ? ? ? ? ? // 設置時間格式
? ? ? ? ? ? formatter.dateFormat =@"yyyyMMddHHmmss";
? ? ? ? ? ? NSString *str = [formatter stringFromDate:[NSDate date]];
? ? ? ? ? ? NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
? ? ? ? ? ? /*
?? ? ? ? ? ? 此方法參數
?? ? ? ? ? ? 1. 要上傳的[二進制數據]
?? ? ? ? ? ? 2. 對應網站上[upload.php中]處理文件的[字段"files"]
?? ? ? ? ? ? 3. 要保存在服務器上的[文件名]
?? ? ? ? ? ? 4. 上傳文件的[mimeType]
?? ? ? ? ? ? */
? ? ? ? ? ? [formData appendPartWithFileData:imageData name:imageParams fileName:fileName mimeType:@"image/jpeg"];
? ? ? ? }
? ? } progress:^(NSProgress *_NonnulluploadProgress) {
? ? } success:^(NSURLSessionDataTask *_Nonnulltask,id? _NullableresponseObject) {
? ? ? ? NSHTTPURLResponse * response = (NSHTTPURLResponse *)task.response;
? ? ? ? NSString *cookieStr = response.allHeaderFields[COOKIE];
? ? ? ? if(cookieStr !=nil) {
? ? ? ? ? ? NSArray *result = [cookieStr componentsSeparatedByString:@"; "];
? ? ? ? ? ? NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
? ? ? ? ? ? OMGLog(@"cookieStr=======>%@",result[0]);
? ? ? ? ? ? [userDefaults setObject:result[0] forKey:COOKIE];
? ? ? ? }
? ? ? ? success(responseObject);
? ? } failure:^(NSURLSessionDataTask *_Nullabletask, NSError *_Nonnullerror) {
? ? ? ? failure(error);
? ? }];
}
@end
/**
?*? 用來封裝文件數據的模型
?*/
@implementation FormData
@end