美文网首页
[AFNetworking]三、AFHTTPSessionMan

[AFNetworking]三、AFHTTPSessionMan

作者: LNG61 | 来源:发表于2019-05-05 14:13 被阅读0次

    AFHTTPSessionManager是在AFURLSessionManager基础上,对Http进行GETHEADPOST等方法的封装,使得Http使用起来更简单。

    初始化

    - (instancetype)initWithBaseURL:(NSURL *)url
               sessionConfiguration:(NSURLSessionConfiguration *)configuration
    {
        self = [super initWithSessionConfiguration:configuration];
        if (!self) {
            return nil;
        }
    
        // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected
        if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) {
            url = [url URLByAppendingPathComponent:@""];
        }
    
        self.baseURL = url;
    
        self.requestSerializer = [AFHTTPRequestSerializer serializer];
        self.responseSerializer = [AFJSONResponseSerializer serializer];
    
        return self;
    }
    
    • 初始化requestSerializerAFHTTPRequestSerializer
    • 初始化responseSerializerAFJSONResponseSerializer

    GET方法

    - (NSURLSessionDataTask *)GET:(NSString *)URLString
                       parameters:(id)parameters
                          headers:(nullable NSDictionary <NSString *, NSString *> *)headers
                         progress:(void (^)(NSProgress * _Nonnull))downloadProgress
                          success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
                          failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
    {
        
        NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET"
                                                            URLString:URLString
                                                           parameters:parameters
                                                              headers:headers
                                                       uploadProgress:nil
                                                     downloadProgress:downloadProgress
                                                              success:success
                                                              failure:failure];
        
        [dataTask resume];
        
        return dataTask;
    }
    
    • 设置HTTPMethodGET

    HEAD方法

    - (NSURLSessionDataTask *)HEAD:(NSString *)URLString
                        parameters:(id)parameters
                           headers:(NSDictionary<NSString *,NSString *> *)headers
                           success:(void (^)(NSURLSessionDataTask * _Nonnull))success
                           failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
    {
        NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters headers:headers uploadProgress:nil downloadProgress:nil success:^(NSURLSessionDataTask *task, __unused id responseObject) {
            if (success) {
                success(task);
            }
        } failure:failure];
        
        [dataTask resume];
        
        return dataTask;
    }
    
    • 设置HTTPMethodHEAD

    POST方法

    - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
                                 parameters:(nullable id)parameters
                                    headers:(nullable NSDictionary <NSString *, NSString *> *)headers
                                   progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress
                                    success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
                                    failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure
    {
        NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters headers:headers uploadProgress:uploadProgress downloadProgress:nil success:success failure:failure];
        
        [dataTask resume];
        
        return dataTask;
    }
    
    • 设置HTTPMethodPOST

    生成task

    - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
                                           URLString:(NSString *)URLString
                                          parameters:(id)parameters
                                             headers:(NSDictionary <NSString *, NSString *> *)headers
                                      uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
                                    downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress
                                             success:(void (^)(NSURLSessionDataTask *, id))success
                                             failure:(void (^)(NSURLSessionDataTask *, NSError *))failure
    {
        NSError *serializationError = nil;
        NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError];
        for (NSString *headerField in headers.keyEnumerator) {
            [request addValue:headers[headerField] forHTTPHeaderField:headerField];
        }
        if (serializationError) {
            if (failure) {
                dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
                    failure(nil, serializationError);
                });
            }
    
            return nil;
        }
    
        __block NSURLSessionDataTask *dataTask = nil;
        dataTask = [self dataTaskWithRequest:request
                              uploadProgress:uploadProgress
                            downloadProgress:downloadProgress
                           completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
            if (error) {
                if (failure) {
                    failure(dataTask, error);
                }
            } else {
                if (success) {
                    success(dataTask, responseObject);
                }
            }
        }];
    
        return dataTask;
    }
    
    • method为对应的GETPOSTHEAD等方法
    • 通过requestSerializer生成一个request,并且设置Http
    • 生成NSURLSessionDataTask

    AFNetworking相关文章:
    [AFNetworking]一、简介
    [AFNetworking]二、AFURLSessionManager
    [AFNetworking]三、AFHTTPSessionManager
    [AFNetworking]四、AFURLRequestSerialization
    [AFNetworking]五、AFURLResponseSerialization

    相关文章

      网友评论

          本文标题:[AFNetworking]三、AFHTTPSessionMan

          本文链接:https://www.haomeiwen.com/subject/gqfgbqtx.html