在项目开发中 网络请求框架,当下使用人数最多的应该就是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) {
}
}
}
以上只是简单的封装了一下,还有很多可以继续优化的