說到AFNetworking,應該是現(xiàn)在應用的最廣泛的第三方庫了,而且封裝的非常好了,不少人拿過AFN之后,直接使用了,也沒什么問題,最多接口不統(tǒng)一,維護困難一些~
不過最好還是對AFN再進行維護一番比較好。
XZNetWorkTool.h文件的聲明:
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
NS_ASSUME_NONNULL_BEGIN
@interface XZNetWorkTool : AFHTTPSessionManager
+ (instancetype)shareInstance;
/**
* 發(fā)送get請求
*
* @param url 請求路徑
* @param params 請求參數(shù)
* @param header 請求頭Header
* @param downloadProgressBlock 網(wǎng)絡請求進度
* @param success 請求成功后的回調(diào),參數(shù)為id類型
* @param failure 請求失敗后的回調(diào)
*/
- (NSURLSessionDataTask *)GET:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;
- (NSURLSessionDataTask *)GET:(NSString *)url
params:(id)params
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;
/**
* 發(fā)送post請求
*
* @param url 請求路徑
* @param params 請求參數(shù)
* @param header 請求頭Header
* @param success 請求成功后的回調(diào),參數(shù)為id類型
* @param failure 請求失敗后的回調(diào)
*/
- (NSURLSessionDataTask *)POST:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;
- (NSURLSessionDataTask *)POST:(NSString *)url
params:(id)params
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;
/**
* 上傳文件
*
* @param url 請求路徑
* @param params 請求參數(shù)
* @param header 請求頭Header
* @param formDataBlock 上傳文件的信息
* @param success 請求成功后的回調(diào),參數(shù)為id類型
* @param failure 請求失敗后的回調(diào)
*/
- (NSURLSessionDataTask *)upload:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))formDataBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;
- (NSURLSessionDataTask *)upload:(NSString *)url
params:(id)params
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))formDataBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;
/**
* 下載
*
* @param url 請求路徑
* @param params 請求參數(shù)
* @param header 請求頭Header
* @param downloadProgressBlock 下載進度
* @param destination 請求成功后的回調(diào),參數(shù)為id類型
* @param completionHandler 請求失敗后的回調(diào)
*/
- (NSURLSessionDownloadTask *)download:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination
completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler;
- (NSURLSessionDownloadTask *)download:(NSString *)url
params:(id)params
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination
completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler;
@end
NS_ASSUME_NONNULL_END
XZNetWorkTool.m文件:
#import "XZNetWorkTool.h"
@implementation XZNetWorkTool
static XZNetWorkTool *_instance = nil;
+ (instancetype)shareInstance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [self manager];
_instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/plain", nil];
// 設置所有接口公用的header
NSDictionary *header = @{
@"TOKEN": @"XXXXXXXXXXX",
@"USERID": @"XXXXXXXXXXX"
};
[_instance setHTTPHeaderKeyValues:header];
});
return _instance;
}
// 設置請求頭
- (void)setHTTPHeaderKeyValues:(NSDictionary *)header {
if (header) {
[header enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[self.requestSerializer setValue:obj forHTTPHeaderField:key];
}];
}
}
/**
* 發(fā)送get請求
*/
- (NSURLSessionDataTask *)GET:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {
/**
* 可以接受的類型
*/
self.responseSerializer = [AFHTTPResponseSerializer serializer];
/**
* 請求超時的時間
*/
self.requestSerializer.timeoutInterval = 30;
/**
* Header 請求頭
*/
if (header) {
[self setHTTPHeaderKeyValues:header];
}
NSURLSessionDataTask *task = [self GET:url parameters:params progress:downloadProgressBlock success:success failure:failure];
return task;
}
- (NSURLSessionDataTask *)GET:(NSString *)url
params:(id)params
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {
return [self GET:url params:params httpHeaderKeyValues:@{} progress:downloadProgressBlock success:success failure:failure];
}
/**
* 發(fā)送post請求
*/
- (NSURLSessionDataTask *)POST:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {
/**
* 可以接受的類型
*/
self.responseSerializer = [AFHTTPResponseSerializer serializer];
/**
* 請求超時的時間
*/
self.requestSerializer.timeoutInterval = 30;
/**
* Header 請求頭
*/
if (header) {
[self setHTTPHeaderKeyValues:header];
}
NSURLSessionDataTask *task = [self POST:url params:params httpHeaderKeyValues:header progress:downloadProgressBlock success:success failure:failure];
return task;
}
- (NSURLSessionDataTask *)POST:(NSString *)url
params:(id)params
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {
return [self POST:url params:params httpHeaderKeyValues:@{} progress:downloadProgressBlock success:success failure:failure];
}
/**
* 上傳文件
*/
- (NSURLSessionDataTask *)upload:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))formDataBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {
/**
* 可以接受的類型
*/
self.responseSerializer = [AFHTTPResponseSerializer serializer];
/**
* 請求超時的時間
*/
self.requestSerializer.timeoutInterval = 30;
/**
* Header 請求頭
*/
if (header) {
[self setHTTPHeaderKeyValues:header];
}
NSURLSessionDataTask *task = [self POST:url parameters:params constructingBodyWithBlock:formDataBlock progress:nil success:success failure:failure];
return task;
}
- (NSURLSessionDataTask *)upload:(NSString *)url
params:(id)params
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))formDataBlock
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {
return [self upload:url params:params httpHeaderKeyValues:@{} constructingBodyWithBlock:formDataBlock success:success failure:failure];
}
/**
* 下載
*/
- (NSURLSessionDownloadTask *)download:(NSString *)url
params:(id)params
httpHeaderKeyValues:(NSDictionary *)header
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination
completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler {
/**
* Header 請求頭
*/
if (header) {
[self setHTTPHeaderKeyValues:header];
}
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSURLSessionDownloadTask *task = [self downloadTaskWithRequest:request progress:downloadProgressBlock destination:destination completionHandler:completionHandler];
[task resume];
return task;
}
- (NSURLSessionDownloadTask *)download:(NSString *)url
params:(id)params
progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock
destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination
completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler {
return [self download:url params:params httpHeaderKeyValues:@{} progress:downloadProgressBlock destination:destination completionHandler:completionHandler];
}
@end