基于AFNetWoring 封装的网络请求类

来源:互联网 发布:淘宝一箩筐 编辑:程序博客网 时间:2024/05/10 17:06

#import <Foundation/Foundation.h>

#import "AFNetworking.h"


typedefvoid(^FinishDidBlock)(AFHTTPRequestOperation *operation,id result);

typedefvoid(^FailureBlock)(AFHTTPRequestOperation *operation,NSError *error);;


@interface DataService :NSObject


+ (AFHTTPRequestOperation *)requestWithURL:(NSString *)url

                                    params:(NSMutableDictionary *)params

                                httpMethod:(NSString *)httpMethod

                            finishDidBlock:(FinishDidBlock)finishDidBlock

                              failureBlock:(FailureBlock)failureBlock;


@end



#import "DataService.h"


#define BASE_URL @"https://open.weibo.cn/2/"


@implementation DataService


+ (AFHTTPRequestOperation *)requestWithURL:(NSString *)url

                                    params:(NSMutableDictionary *)params

                                httpMethod:(NSString *)httpMethod

                            finishDidBlock:(FinishDidBlock)finishDidBlock

                              failureBlock:(FailureBlock)failureBlock

{

   if (params == nil) {

       params = [NSMutableDictionarydictionary];

    }

    

    //拼接URL

    NSMutableString *urlStr = [NSMutableStringstringWithFormat:@"%@%@",BASE_URL, url];

    

    //参数处理

    NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];

   NSDictionary *sinaweiboInfo = [defaults objectForKey:@"SinaWeiboAuthData"];

   NSString *accessTokenKey = [sinaweiboInfo objectForKey:@"AccessTokenKey"];

   if (accessTokenKey.length ==0) {

       return nil;

    }

    

    [paramssetObject:accessTokenKey forKey:@"access_token"];

    

    //创建请求管理对象

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    manager.requestSerializer = [AFHTTPRequestSerializerserializer];

    

    AFHTTPRequestOperation *operation =nil;

    

   if ([httpMethod isEqualToString:@"GET"]) {

        operation = [managerGET:urlStr

                     parameters:params

                        success:^(AFHTTPRequestOperation *operation,id responseObject) {

                            //请求成功

                            NSLog(@"AF-GET请求成功");

                            if (finishDidBlock) {

                                 finishDidBlock(operation, responseObject);

                             }

                             

                         }failure:^(AFHTTPRequestOperation *operation,NSError *error) {

                            //请求失败

                            NSLog(@"请求失败");

                            if (failureBlock) {

                                 failureBlock(operation, error);

                             }

                         }];

    }elseif ([httpMethod isEqualToString:@"POST"]){

        

       //POST请求

        

       BOOL isFile = NO;

       for (NSString *keyin params) {

           id value = params[key];

           if ([value isKindOfClass:[NSDataclass]]) {

               //有文件类型的参数

                isFile =YES;

               break;

            }

        }

        

       if (!isFile) {

           //没有文件

            operation = [managerPOST:urlStr

                          parameters:params

                             success:^(AFHTTPRequestOperation *operation,id responseObject) {

                                 //请求成功

                                 NSLog(@"AF-POST(非文件)请求成功");

                                 if (finishDidBlock) {

                                      finishDidBlock(operation, responseObject);

                                  }


                              }failure:^(AFHTTPRequestOperation *operation,NSError *error) {

                                 //请求失败

                                 NSLog(@"AF-POST(非文件)请求失败");

                                 if (failureBlock) {

                                      failureBlock(operation, error);

                                  }


                              }];

            

        }else{

           //有文件

            operation = [managerPOST:urlStr

                          parameters:params

           constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

                

               for (NSString *keyin params) {

                   id value = params[key];

                   if ([value isKindOfClass:[NSDataclass]]) {

                        

                        [formDataappendPartWithFileData:value

                                                   name:key

                                               fileName:key

                                               mimeType:@"image/jpeg"];

                    }

                }

                

            }success:^(AFHTTPRequestOperation *operation,id responseObject) {

               //请求成功

               NSLog(@"AF-POST(带文件)请求成功");

               if (finishDidBlock) {

                    finishDidBlock(operation, responseObject);

                }


            }failure:^(AFHTTPRequestOperation *operation,NSError *error) {

               //请求失败

               NSLog(@"AF-POST(带文件)请求失败");

               if (failureBlock) {

                    failureBlock(operation, error);

                }


            }];

            

        }

    }

    

    //设置返回数据的解析方式

    operation.responseSerializer = [AFJSONResponseSerializerserializerWithReadingOptions:NSJSONReadingMutableContainers];

    

   return operation;

}

@end



0 0
原创粉丝点击