iOS AFNetworking 網(wǎng)絡(luò)請(qǐng)求POST與GET的進(jìn)一步封裝

AFNetworking淺析

AFNetworking 是為iOS 和Mac OSX 制作的一個(gè)非常強(qiáng)大的網(wǎng)絡(luò)庫(kù),它建立在URL裝載系統(tǒng)框架的頂層,內(nèi)置在cocoa里,擴(kuò)展了強(qiáng)有力的高級(jí)網(wǎng)絡(luò)抽象。它擁有良好的架構(gòu),豐富的功能設(shè)計(jì)。

AFNetworking功能梳理

AFURLConnectionOperation : 繼承自NSOperation 實(shí)現(xiàn)了NSURLConnection 的代理方法。

AFHTTPRequestOperation : 繼承自AFURLConnectionOperation的子類,當(dāng)request請(qǐng)求使用的協(xié)議為HTTP和HTTPS時(shí)使用,它封裝了用于 決定request是否成功的狀態(tài)碼和內(nèi)容類型。

AFJSONRequestOperation : 繼承自AFHTTPRequestOperation,用于下載和處理json response數(shù)據(jù)。

AFXMLRequestOperation : 繼承自 AFHTTPRequestOperation,用于下載和處理xml response數(shù)據(jù)。

AFPropertyListRequestOperation : 繼承自 AFHTTPRequestOperation,用于下載和處理 property list? response數(shù)據(jù)。

POST 請(qǐng)求

/*

*url 請(qǐng)求鏈接

*params 參數(shù)對(duì)象

*result 請(qǐng)求成功返回?cái)?shù)據(jù)對(duì)象

*error ?請(qǐng)求失敗返回錯(cuò)誤信息

*/

+ (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請(qǐng)求

/*

*url 請(qǐng)求鏈接

*params 參數(shù)對(duì)象

*result 請(qǐng)求成功返回?cái)?shù)據(jù)對(duì)象

*error? 請(qǐng)求失敗返回錯(cuò)誤信息

*/

+ (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);

}

}];

}

//對(duì)后臺(tái)返回錯(cuò)誤進(jìn)行解析

+ (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"]);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容