美文网首页iOS专题
iOS AFNetworking使用

iOS AFNetworking使用

作者: Zhen斌iOS | 来源:发表于2020-06-02 10:58 被阅读0次

    https://github.com/AFNetworking/AFNetworking

    1. GET请求

        AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
        NSDictionary *dict = @{
            @"username":@"520it",
            @"pwd":@"520it"
            };
        // parameters 参数字典
        [manager GET:@"http://120.25.226.186:32812/login" parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {
            //进度
            //进度
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            // task 我们可以通过task拿到响应头
            // responseObject:请求成功返回的响应结果(AFN内部已经把响应体转换为OC对象,通常是字典或数组)
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            // error 错误信息
        }];
    

    2. POST请求

        AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
        NSDictionary *dict = @{
                               @"username":@"520it",
                               @"pwd":@"520it"
                               };
        [manager POST:@"http://120.25.226.186:32812/login" parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {
            // 进度
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            // 请求成功
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            // 请求失败
        }];
    

    3. 文件下载

        // 1.创建一个管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        // 2. 创建请求对象
        NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_03.png"];
        NSURLRequest *request =[NSURLRequest requestWithURL:url];
        // 3. 下载文件
        NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        // downloadProgress.completedUnitCount 当前下载大小
        // downloadProgress.totalUnitCount 总大小
        NSLog(@"%f", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
        } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
            // targetPath  临时存储地址
            NSLog(@"targetPath:%@",targetPath);
            NSString *path =[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
            NSString *filePath = [path stringByAppendingPathComponent:response.suggestedFilename];
            NSURL *url = [NSURL fileURLWithPath:filePath];
            NSLog(@"path:%@",filePath);
            // 返回url 我们想要存储的地址
            // response 响应头
            return url;
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
            // 下载完成之后调用
            // response 响应头
            // filePath 下载存储地址
            NSLog(@"filePath:%@",filePath);
        }];
        // 需要手动开启
        [downloadTask resume];
    

    4. 文件上传

    方法1
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSString *url =@"http://120.25.226.186:32812/upload";
        [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            // formData 将要上传的数据
            UIImage *image =[UIImage imageNamed:@"123"];
            NSData *data =UIImagePNGRepresentation(image);
            // 方法一
            /** 
              data:上传文件二进制数据
              name:接口的名字
              fileName:文件上传到服务器之后叫什么名字
              mineType:上传文件的类型,可以上传任意二进制mineType.
             */
            [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
            // 方法二
            /**
             data:上传文件二进制数据
             name:接口的名字
             这种方法内部会将文件名当做上传到服务器之后的名字,并自动获取其类型
             */
            [formData appendPartWithFormData:data name:@"file"];
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            // 上传进度
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            // 上传成功
            NSLog(@"上传成功");
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            // 上传失败
            NSLog(@"上传失败");
        }];
    
    方法2
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSString *url =@"http://120.25.226.186:32812/upload";
        [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            // formData 将要上传的数据
            // 直接传URL
            NSURL *url =[NSURL fileURLWithPath:@"/Users/yangboxing/Desktop/Snip20160905_7.png"];
            // 方法一
            [formData appendPartWithFileURL:url name:@"file" fileName:@"hhaha.png" mimeType:@"image/png" error:nil];
            // 方法二
            /** 
             这个方法会自动截取url最后一块的文件名作为上传到服务器的文件名 
             也会自动获取mimeType,如果没有办法获取mimeType 就使用@"application/octet-stream" 表示任意的二进制数据 ,当我们不在意文件类型的时候 也可以用这个。
             */
            [formData appendPartWithFileURL:url name:@"file" error:nil];
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            // 上传进度
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            // 上传成功
            NSLog(@"上传成功");
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            // 上传失败
            NSLog(@"上传失败");
        }];
    

    5. AFN网络状态的检测

        AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
        /*
        AFNetworkReachabilityStatusUnknown          = -1, 未知
        AFNetworkReachabilityStatusNotReachable     = 0,  没有网络
        AFNetworkReachabilityStatusReachableViaWWAN = 1,  蜂窝流量
        AFNetworkReachabilityStatusReachableViaWiFi = 2,  无线
        */
        // 监听网络状态的变化
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown:
                    NSLog(@"未知");
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                    NSLog(@"没有网络");
                    break;
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    NSLog(@"3G");
                    break;
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    NSLog(@"无线");
                    break;
                    
                default:
                    break;
            }
        }];
        // 开启
        [manager startMonitoring];
    

    相关文章

      网友评论

        本文标题:iOS AFNetworking使用

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