基于AFNetWoring 封装的网络请求类

#import <Foundation/Foundation.h>

#import "AFNetworking.h"


typedef void(^FinishDidBlock)(AFHTTPRequestOperation *operation, id result);

typedef void(^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 = [NSMutableDictionary dictionary];

    }

    

    //拼接URL

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

    

    //参数处理

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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

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

    if (accessTokenKey.length == 0) {

        return nil;

    }

    

    [params setObject:accessTokenKey forKey:@"access_token"];

    

    //创建请求管理对象

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.requestSerializer = [AFHTTPRequestSerializer serializer];

    

    AFHTTPRequestOperation *operation = nil;

    

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

        operation = [manager GET: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);

                             }

                         }];

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

        

        //POST请求

        

        BOOL isFile = NO;

        for (NSString *key in params) {

            id value = params[key];

            if ([value isKindOfClass:[NSData class]]) {

                //有文件类型的参数

                isFile = YES;

                break;

            }

        }

        

        if (!isFile) {

            //没有文件

            operation = [manager POST: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 = [manager POST:urlStr

                           parameters:params

            constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

                

                for (NSString *key in params) {

                    id value = params[key];

                    if ([value isKindOfClass:[NSData class]]) {

                        

                        [formData appendPartWithFileData: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 = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingMutableContainers];

    

    return operation;

}

@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值