iOS 網(wǎng)絡請求(基于AFNetworking的再次封裝)

說到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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容