美文网首页iOS 开发
AFNetworking使用

AFNetworking使用

作者: Mr丶炎 | 来源:发表于2016-07-31 12:53 被阅读17次

    1、get请求
    2、post请求
    3、文件下载
    4、文件上传

    AFNetworking3.0是对NSURLSession的包装,很多细节都封装起来了,不用担心

    • get请求
    - (void)get {
        
        // 创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSDictionary *paramDict = @{
                                    @"username" : @"520it",
                                    @"pwd" : @"520it",
                                    @"type" : @"JSON"
                                    };
        
        /**
         * 发送get请求
         * 第一个参数:请求路径(不包含参数)
         * 第二个参数:字典(发送给服务器的数据)
         * 第三个参数:progress 进度回调
         * 第四个参数:success 成功回调
         * 第五个参数:failure
         */
        [manager GET:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            
            
            
        }];
        
        
    }
    
    
    • post请求
    - (void)post {
        
        // 创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSDictionary *paramDict = @{
                                    @"username" : @"520it",
                                    @"pwd" : @"520it",
                                    @"type" : @"JSON"
                                    };
        
        /**
         * 发送post请求
         * 第一个参数:请求路径(不包含参数)
         * 第二个参数:字典(发送给服务器的数据)
         * 第三个参数:progress 进度回调
         * 第四个参数:success 成功回调
         * 第五个参数:failure
         */
        [manager POST:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            
            
            
        }];
        
    }
    
    • 下载。 这里有一些注意的地方
      • manager有返回值,需要接收之后开启任务。
      • destination有返回值
    - (void)dowLoad {
        
        // 创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_04.mp4"]];
        
        /**
         * 文件下载
         * 参数1:请求对象
         * 参数2:progress 进度回调 completedUnitCount已完成 / totalUnitCount总的
         * 参数3:destination 回调(目标位置)
                有返回值
                targetPath 临时文件路径
                response 响应头信息
         * 参数4:completionHandler 下载完成后的回调
                filePath 文件路径
         */
        NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
            
            NSLog(@"%f", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
            
        } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
            
            NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
            
            return [NSURL fileURLWithPath:fullPath];
            
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
            
        }];
        
        // 执行task
        [download resume];
        
    }
    
    • 上传文件
    - (void)upLoad {
        
        // 创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        // 发送post请求上传文件
        /** 
         * 参数1:请求路径
         * 参数2:字典(非文件参数)
         * 参数3:constructingBodyWithBlock 处理要上传的文件数据
         * 参数4:进度回调
         * 参数5:上传成功回调 responseObject响应体信息
         */
        [manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            
    //        UIImage *image = [UIImage imageNamed:@"xmg"];
    //        NSData *imageData = UIImagePNGRepresentation(image);
            
            // 使用formData来拼接数据
            /**
             * 参数1:二进制数据,要上传的文件参数
             * 参数2:服务器规定的
             * 参数3:该文件上传到服务器以什么名称保存
             */
    //        [formData appendPartWithFileData:imageData name:@"file" fileName:@"xxx.png" mimeType:@"image/png"];
            
    //        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/mac2/Desktop/xmg.png"] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
            
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/mac2/Desktop/xmg.png"] name:@"file" error:nil];
            
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            
            NSLog(@"%f", 1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"上传成功");
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            NSLog(@"上传失败");
        }];
      
    }
    
    
    • AFN判断网络状态
    AFNetworkReachabilityManager * manager = [AFNetworkReachabilityManager sharedManager];
    
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            /*
             AFNetworkReachabilityStatusUnknown          = -1,
             AFNetworkReachabilityStatusNotReachable     = 0,
             AFNetworkReachabilityStatusReachableViaWWAN = 1,
             AFNetworkReachabilityStatusReachableViaWiFi = 2,
             */
            switch (status) {
                case AFNetworkReachabilityStatusUnknown:
                    MH_LOG(@"网络状态未知");
                    break;
                 case AFNetworkReachabilityStatusNotReachable:
                    MH_LOG(@"没有网络");
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"NotReachable" object:nil];
    
                    break;
                case  AFNetworkReachabilityStatusReachableViaWWAN:
                    MH_LOG(@"3G|4G蜂窝移动网络");
                    break;
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    MH_LOG(@"WIFI网络");
                    break;
                default:
                    break;
            }
        }];
    
    开始监听
    [manager startMonitoring];
    

    相关文章

      网友评论

        本文标题:AFNetworking使用

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