美文网首页
AFNetWorking使用

AFNetWorking使用

作者: 00d1ed2b53ae | 来源:发表于2018-11-08 14:16 被阅读16次

    GET请求

    -(void)get
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //2.封装参数
        NSDictionary *dict = @{
                               @"username":@"Lion",
                               @"pwd":@"1314",
                               @"type":@"JSON"
                               };
        //3.发送GET请求
        /*
         第一个参数:请求路径(NSString)+ 不需要加参数
         第二个参数:发送给服务器的参数数据
         第三个参数:progress 进度回调
         第四个参数:success  成功之后的回调(此处的成功或者是失败指的是整个请求)
            task:请求任务
            responseObject:注意!!!响应体信息--->(json--->oc))
            task.response: 响应头信息
         第五个参数:failure 失败之后的回调
         */
        [manager GET:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"success--%@--%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            NSLog(@"failure--%@",error);
        }];
    }
    

    POST

    [manager POST:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"success--%@--%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            NSLog(@"failure--%@",error);
        }];
    

    下载

    -(void)download
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //2.确定请求路径
        NSURL *url = [NSURL URLWithString:@"需要请求的URL"];
        
        //3.创建请求对象
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        //4.发送网络请求下载文件
        /*
         第一个参数:请求对象
         第二个参数:progress 进度回调
                    downloadProgress
                    @property int64_t totalUnitCount;
                    @property int64_t completedUnitCount;
         第三个参数:destination 让我们告诉系统应该把文件存放到什么地方
                    内部自动的完成剪切处理
         第四个参数: completionHandler 完成之后的回调
                    response 响应头信息
                    filePath  文件最终的存储路径
                    error 错误信息
         */
        [[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];
            
            NSLog(@"fullpath == %@",fullpath);
            return [NSURL fileURLWithPath:fullpath];
            
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
    
            NSLog(@"%@",filePath);
        }] resume];
        
    }
    
    

    上传

    -(void)upload
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //2.发送请求上传文件
        /*
         第一个参数:请求路径(NSString)
         第二个参数:非文件参数
         第三个参数:constructingBodyWithBlock 拼接数据(告诉AFN要上传的数据是哪些)
         第四个参数:progress 进度回调
         第五个参数:success 成功回调 
            responseObject:响应体
         第六个参数:failure 失败的回调
         */
        [manager POST:@"需要请求的URL" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            
            NSData *data = [NSData dataWithContentsOfFile:@"/Users/apple/Desktop/Snip20160409_148.png"];
            //拼接数据
            /*
             第一个参数:文件参数 (二进制数据)
             第二个参数:参数名~file
             第三个参数:该文件上传到服务器以什么名称来保存
             第四个参数:
             */
            [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
            
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"success--%@",responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"failure -- %@",error);
        }];
    }
    
    

    JSON解析

    //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        /*
         1)afn内部默认已经完成了JSON解析工作
            优点:方便
            缺点:如果服务器返回的数据不是JSON会报错
         */
        NSDictionary *dict = @{@"type":@"JSON"};
        //2.发请求
        [manager GET:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@--%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"%@---",error);
        }];
    
    

    xml解析

    -(void)xml
    {
    <NSXMLParserDelegate>代理协议
    
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //设置以XML的方式来解析数据
        manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
        
        NSDictionary *dict = @{@"type":@"XML"};
        //2.发请求
        [manager GET:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@--%@",[responseObject class],responseObject);
            //1.创建解析器
            NSXMLParser *parser = (NSXMLParser *)responseObject;
            
            //2.设置代理
            parser.delegate = self;
            
            //3.开始解析
            [parser parse];
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"%@---",error);
        }];
    }
    
    

    检测网络状态

    -(void)networkStatusChangeAFN
    {
        //1.获得一个网络状态监听管理者
       AFNetworkReachabilityManager *manager =  [AFNetworkReachabilityManager sharedManager];
        
        //2.监听状态的改变(当网络状态改变的时候就会调用该block)
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            
            /*
             AFNetworkReachabilityStatusUnknown          = -1,  未知
             AFNetworkReachabilityStatusNotReachable     = 0,   没有网络
             AFNetworkReachabilityStatusReachableViaWWAN = 1,    3G|4G
             AFNetworkReachabilityStatusReachableViaWiFi = 2,   WIFI
             */
            switch (status) {
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    NSLog(@"wifi");
                    break;
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    NSLog(@"3G|4G");
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                    NSLog(@"没有网络");
                    break;
                case AFNetworkReachabilityStatusUnknown:
                    NSLog(@"未知");
                    break;
                    
                default:
                    break;
            }
        }];
        
        //3.手动开启 开始监听
        [manager startMonitoring];
    }
    
    

    相关文章

      网友评论

          本文标题:AFNetWorking使用

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