AFNetworking 请求工具类

在项目开发中 网络请求框架,当下使用人数最多的应该就是AFNetworking,AFN自3.0后全面使用session 请求网络数据.
这里附上AFN GitHub的下载地址:AFNetworking
为了更便捷的使用AFN,今天对AFN的使用进行了简单封装,如下

创建一个类QCHttpTool继承自NSObject
QCHttpTool.h 代码如下

//
//  QCHttpTool.h
//  AFNetworkingDemo
//
//  Created by 卢奇春 on 2017/8/9.
//  Copyright © 2017年 卢奇春. All rights reserved.
//

#import <Foundation/Foundation.h>


typedef enum {

    QCHttpMethodGET,
    QCHttpMethodPOST,
    QCHttpMethodPATCH,
    QCHttpMethodDELETE,
    QCHttpMethodPUT

}QCHttpMethod;

@interface QCHttpTool : NSObject



/**
 Get 请求方法

 @param url 请求地址
 @param params 请求参数
 @param success 返回成功
 @param failure 返回失败
 */
+ (void)GET:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;

//post 请求
+ (void)POST:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;

//patch 请求
+ (void)PATCH:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;

//delete 请求
+ (void)DELETE:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;

//put 请求
+ (void)PUT:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;

QCHttpTool.m

//
//  QCHttpTool.m
//  AFNetworkingDemo
//
//  Created by 卢奇春 on 2017/8/9.
//  Copyright © 2017年 卢奇春. All rights reserved.
//

#import "QCHttpTool.h"
#import "AFNetworking.h"

@implementation QCHttpTool

//初始化创建
+ (AFHTTPSessionManager *)sessionManage {

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    //请求超时时间
    manager.requestSerializer.timeoutInterval = 10.0f;

    //设置请求头
    [manager.requestSerializer setValue:@"token信息" forHTTPHeaderField:@"Authorization"];
    //解析的类型
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];

    return manager;
}

+ (void)GET:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure {

    [self httpMethod:QCHttpMethodGET url:url params:params success:success failure:failure];
}

+ (void)POST:(NSString *)url params:(id)params success:(void (^)(id))success failure:(void (^)(NSError *))failure {

    [self httpMethod:QCHttpMethodPOST url:url params:params success:success failure:failure];
}

+ (void)PATCH:(NSString *)url params:(id)params success:(void (^)(id))success failure:(void (^)(NSError *))failure {

    [self httpMethod:QCHttpMethodPATCH url:url params:params success:success failure:failure];
}

+ (void)DELETE:(NSString *)url params:(id)params success:(void (^)(id))success failure:(void (^)(NSError *))failure {

    [self httpMethod:QCHttpMethodDELETE url:url params:params success:success failure:failure];
}

+ (void)PUT:(NSString *)url params:(id)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure {

    [self httpMethod:QCHttpMethodPUT url:url params:params success:success failure:failure];
}

//http 请求
+ (void)httpMethod:(QCHttpMethod)httpMethod url:(NSString *)url params:(id)params success:(void (^)(id))success failure:(void (^)(NSError *))failure {

    AFHTTPSessionManager *manager = [QCHttpTool sessionManage];

    //请求成功执行代码
    void(^successBlock)(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) = ^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        success(responseObject);
    };

    //请求失败执行代码
    void(^failureBlock)(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) = ^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        [self processHttpStatusCodeWithSessionTask:task];
        failure(error);
    };


    switch (httpMethod) {
        case QCHttpMethodGET:
            [manager GET:url parameters:params progress:nil success:successBlock failure:failureBlock];
            break;

        case QCHttpMethodPOST:
            [manager POST:url parameters:params progress:nil success:successBlock failure:failureBlock];
            break;

        case QCHttpMethodPATCH:
            [manager PATCH:url parameters:params success:successBlock failure:failureBlock];
            break;

        case QCHttpMethodDELETE:
            [manager DELETE:url parameters:params success:successBlock failure:failureBlock];
            break;

        default:
            break;
    }
}

+ (void)processHttpStatusCodeWithSessionTask:(NSURLSessionDataTask *)task {

    if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {
        NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
        NSInteger statusCode = response.statusCode;

        if (statusCode == 401) {
            NSLog(@"请求错误");
        } else if (statusCode == 403) {

        } else if (statusCode == 413) {

        } else if (statusCode == 500) {
            NSLog(@"服务器异常");
        } else if (statusCode == 501) {

        } else if (statusCode == 503) {

        }
    }
}

以上只是简单的封装了一下,还有很多可以继续优化的

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值