AFNetworking使用

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  _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使用)