AFNetworking淺析
AFNetworking 是為iOS 和Mac OSX 制作的一個非常強大的網絡庫,它建立在URL裝載系統框架的頂層,內置在cocoa里,擴展了強有力的高級網絡抽象。它擁有良好的架構,豐富的功能設計。
AFNetworking功能梳理
AFURLConnectionOperation : 繼承自NSOperation 實現了NSURLConnection 的代理方法。
AFHTTPRequestOperation : 繼承自AFURLConnectionOperation的子類,當request請求使用的協議為HTTP和HTTPS時使用,它封裝了用于 決定request是否成功的狀態碼和內容類型。
AFJSONRequestOperation : 繼承自AFHTTPRequestOperation,用于下載和處理json response數據。
AFXMLRequestOperation : 繼承自 AFHTTPRequestOperation,用于下載和處理xml response數據。
AFPropertyListRequestOperation : 繼承自 AFHTTPRequestOperation,用于下載和處理 property list? response數據。
POST 請求
/*
*url 請求鏈接
*params 參數對象
*result 請求成功返回數據對象
*error ?請求失敗返回錯誤信息
*/
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(id result))successHandler failure:(void (^)(NSString *error))failureHandler;
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(id result))successHandler failure:(void (^)( NSString*error))failureHandler
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes =? [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain",nil];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
manager.requestSerializer.timeoutInterval = 30;
[manager POST:url parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {
successHandler(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failureHandler) {
failureHandler([self errorToString:error]);
}
}];
}
GET請求
/*
*url 請求鏈接
*params 參數對象
*result 請求成功返回數據對象
*error? 請求失敗返回錯誤信息
*/
+ (void)GET:(NSString *)url params:(NSDictionary *)params success:(void (^)(id result))successHandler failure:(void (^)(NSError *error))failureHandler;
+ (void)GET:(NSString *)url params:(NSDictionary *)params success:(void (^)(id result))successHandler failure:(void (^)(NSError *error))failureHandler
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
}success:^(NSURLSessionDataTask * _Nonnull operation, id? _Nonnull responseObject) {
if (successHandler) {
NSData *data = (NSData *)responseObject;
NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
successHandler(obj[@"result"]);
}
} failure:^(NSURLSessionDataTask * _Nullable operation, NSError * _Nonnull error) {
if (failureHandler) {
failureHandler(error);
}
}];
}
//對后臺返回錯誤進行解析
+ (NSString *)errorToString :(NSError *)error{
NSError *err;
NSData *data = [[error userInfo]objectForKey:@"com.alamofire.serialization.response.error.data"];
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&err];
KKLog(@"%@? %@",error, dic[@"error"]);
}