iOS网络请求库

pod 集成


pod 'AFNetworking''~> 4.0'



或者下载附件直接添加到项目当中

AFNetworking.zip 4.0

AFN3.x.zip 3.x

作为一个iOS开发者耳熟能详的网络请求库 .具体用法不在赘述这里简单介绍一下使用中的技巧吧(因为目前普遍使用的是3.x的版本,所以技巧主要适用于3.x )

正常用法:

[[AFHTTPSessionManager managerPOST:@"port"parameters:nilprogress:^(NSProgress * _Nonnull uploadProgress) {

            

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            

        }];


可其实AFNmanager方法只是伪单例我们完全可以基于AFN进行一次二次封装做成真单例

:ZyNetWorking.h

**

 *  请求成功所走方法

 *

 *  @param responseObject 请求返还的数据

 */

typedef void (^ZuYResponseSuccess)(NSURLSessionDataTask * task,id responseObject,NSInteger code);



/**

 *  请求错误所走方法

 *

 *  @param error 请求错误返还的信息

 */

typedef void (^ZYResponseFail)(NSURLSessionDataTask * task, NSError * error);



typedef void (^ZYProgress)(NSProgress *progress);

@interfaceZyNetworking : NSObject


+ (instancetype)shareInstance;


-(void)POST:(NSString *)url

     params:(NSDictionary *__nullable)params

    success:(ZuYResponseSuccess)success

       fail:(ZYResponseFail)fail;

ZyNetWorking.m

@interfaceZyNetworking ()

@property (nonatomicstrongAFHTTPSessionManager *manager;

@end

@implementationZyNetworking

staticZyNetworking *_instance = nil;

+ (instancetype)shareInstance

{

    static dispatch_once_t onceToken ;

    dispatch_once(&onceToken, ^{

        _instance = [[super allocWithZone:NULLinit];

        _instance.manager = [AFHTTPSessionManagermanager];

        _instance.manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObjects:@"text/plain",@"application/json"@"text/json"@"text/javascript",nil];

        _instance.manager.requestSerializer.timeoutInterval = 30.f;// 请求超时时间

    }) ;

    return_instance;

}

 

-(void)POST:(NSString *)url params:( NSDictionary *__nullable)params

    success:(ZuYResponseSuccess)success fail:(ZYResponseFail)fail{

     

     //如果需要请求token权鉴 ,可也在这里进行统一处理

    [_instance.manager.requestSerializersetValue:token forHTTPHeaderField:@"token"];

    

        [_instance.manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

     //your code 

     //根据你的业务需求进行你想要的处理

     //甚至可以配合测试业务处理请求日志



            NSInteger code = [[responseObject objectForKey:@"code"integerValue];


            success(task,responseObject,code);


            

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            

            NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;

         // your code . 

         //示例根据失败也业务码进行不同的处理 .例如401 需要重新请求token   402强制退出登录等 . 也可记录请求日志(错误)

         // 如不需要也可直接做 fail(task,error)的回调

            if (responses.statusCode == 401) {

             

                [self zuyuTokenRefresh:url params:params];

               

            }else if (responses.statusCode == 402) {

                

            }else{

                fail(task,error);

            }

        }]; 

    

}

 



git地址:https://github.com/AFNetworking/AFNetworking

1 个评论

学到了

要回复文章请先登录注册