AFNetworking简单使用

iOS开发中一般情况下,简单地向某个Web站点简单的页面提交请求并获取服务器的响应,用Xcode自带的API就能胜任。但是在数据处理(如下载等)需要自己实现。代码量较大,难以管理,此时可以选择使用第三方网络库。常用的有AFNetworking、ASIHTTPRequest、MKNetworkKit、RestKit等

下面介绍AFNetworking

AFNetworking是一个能够快速使用的iOS和Mac OS X 下的网络框架,它构建在Foundation URL Loading System之上,封装了网络的抽象层,可以方便的使用,AFNetworking是一个模块化架构,拥有丰富的API框架。AFNetworking是目前使用人数最多的第三方框架网络库。

下面将使用AFNetworking中基于NSURLSession API支持封装的接口进行介绍。

AFNetworking重要组成部分:

  • AFURLSessionManager:创建、管理基于NSURLSessionConfiguration对象的NSURLSession对象的类,也可以管理session的数据、下载/上传任务,实现session和其相关联的任务的delegate方法。因为NSURLSession API设计中的不足,任何和NSURLSession相关的代码都可以用AFURLSessionManager改善;

  • AFHTTPSessionManager:是AFURLSessionManager的子类,包装常见的HTTP web服务操作,通过AFURLSessionManager 由NSURLSession支持。例如:GET、POST、HEAD、PUT等;

  • :符合这个协议的对象用于处理请求,它将请求参数转换为query string 或是 entity body 的形式,并设置必要的header;

  • :符合这个协议的对象用于验证、序列化响应及相关数据,转换为有用的形式,比如JSON对象、图像、甚至基于Mantle的模型对象;

  • AFSecurityPolicy:评估服务器对安全连接针对指定的固定证书或公共密钥的信任,将你的服务器证书添加到app bundle,以帮助防止其他人的攻击;

  • AFNetworkReachabilityManager-这个类监控当前网络的可达性,提供回调block和notification,在可达性变化时调用。

使用AFNetworking做GET请求:

////做get请求/////////
NSString *urlString = @"https://api.weibo.com/2/statuses/public_timeline.json";

NSDictionary *parameters = @{@"access_token":@"2.00PogMQGGQ5O2E3633c3a534p58DVB"};

//1.创建管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//2.设置请求参数的拼接
manager.requestSerializer = [AFHTTPRequestSerializer serializer];

//3.设置接受的响应数据类型
manager.responseSerializer = [AFJSONResponseSerializer serializer];

//做get请求
[manager GET:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"responseObject is:%@",responseObject);
    
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"error is:%@",error);
}];

使用AFNetworking做POST请求:

//1.创建管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//2.设置请求参数的拼接   
manager.requestSerializer = [AFHTTPRequestSerializer serializer];

//3.设置接受的响应数据类型
manager.responseSerializer = [AFJSONResponseSerializer serializer];

//做简单的post请求
NSString *postUrlString = @"https://api.weibo.com/2/statuses/update.json";

NSDictionary *postDic = @{@"access_token":@"2.00PogMQGGQ5O2E3633c3a534p58DVB",@"status":@"hehehe"};

///post上传文本////////
[manager POST:postUrlString parameters:postDic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    NSLog(@"上传成功");
    
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"error is:%@",error);
}];

//POST上传图片:    
NSString *postImgUrlString = @"https://upload.api.weibo.com/2/statuses/upload.json";

NSDictionary *dic = @{@"access_token":@"2.00PogMQGGQ5O2E3633c3a534p58DVB",@"status":@"嘿嘿嘿、、"};

[manager POST:postImgUrlString parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    
    //将图片转化为data数据
    NSString *imgPath = [[NSBundle mainBundle] pathForResource:@"img" ofType:@"png"];
    
    NSData *imgData = [NSData dataWithContentsOfFile:imgPath];
    
    //将图片数据拼接form表单中
    [formData appendPartWithFileData:imgData name:@"pic" fileName:@"img.png" mimeType:@"image/png"];
    
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"上传成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"error is:%@",error);
}];
}

-使用AFNetworking做download请求:

/////执行download下载.//////
AFURLSessionManager *urlManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURL *url = [NSURL URLWithString:@"http://vf1.mtime.cn/Video/2012/04/23/mp4/120423212602431929.mp4"];

//创建request请求
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];

//创建下载任务
NSURLSessionDownloadTask *task = [urlManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
    
    NSLog(@"progress is:%@",downloadProgress);
    
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
    
    //返回数据存储的文件路径  下载完成后数据文件将自动拷贝到该文件下
    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/123.mp4"];
    
    //将字符串转化为文件路径  注意一定要使用fileURLWithPath:该方法
    return [NSURL fileURLWithPath:filePath];
    
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
    
    if (error) {
        NSLog(@"error is:%@",error);
    }
    
    NSLog(@"filePath is:%@",[NSString stringWithFormat:@"%@",filePath]);
}];

//执行任务
[task resume];

你可能感兴趣的:(AFNetworking简单使用)