iOS-三方框架AFNetworking基本使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-三方框架AFNetworking基本使用相关的知识,希望对你有一定的参考价值。

  AFNetworking 是基于NSURLConnection, NSOperation 开发的一款三方框架,主要用于处理一些关于网络请求上的业务,下文会简单介绍框架中经常使用的功能,如文件的上传,下载,解析.

   一.GET&POST 请求

    1 .首先最重要的当然是导入头文件

#import "AFNetworking.h"

    2. 创建会话管理者(创建的管理者对象并不是单例)

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]

   3.最后很简单,只要直接调用方法就可以了

GET后面第一个参数,就是我们所说的请求头,但是这里有个注意问题:平时我们使用NSURLConnection和NSURLSession时发送GET请求时所有内容都是写入请求头中的,也就是请求地址中要加上一大推参数,而在这个方法中AFN将请求体信息单独抽出来,放在红色背景的这块区域,你可以将你所要上传的请求体包装成字典,然后作为参数添加到其中,这样做有个好处就是当我们发送POST请求时, 只需要将此方法中的GET替换成POST即可

get请求
[manager GET:@"http://***.**.***.***:*****/login" parameters:<#(nullable id)#> progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) 请求成功,会调用此block,responseObject为响应体信息,内部已经将信息完成了序列化 NSLog(@"%@--%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 如果请求失败,会调用此block error 则为请求失败原因 }];
post请求 可以看出两个方法只差一个单词
       [manager POST:@"http://***.**.***.***:*****/login" parameters:<#(nullable id)#> progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //3.解析
        NSLog(@"%@--%@",[responseObject class],responseObject);
     ==   
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) 
    }];
}

  二.AFN下载文件

   1 .同样是简单的方法调用,
 1   //1.创建会话管理者
 2     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 3     
 4     //2.创建请求对象
 5     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"随便添加一张网上照片的地址"]];
 6     
 7     //3.创建下载任务
 8     /*
 9      第一个参数:请求对象
10      第二个参数:进度回调 downloadProgress(获得进度信息)
11      第三个参数:destination
12                 targetPath:文件的临时存储路径
13                 response:响应头信息
14                 返回值:NSURL(AFN内部已经实现了文件剪切的过程,但是需要我们告诉他应该把文件剪切到哪里)
15      第四个参数:completionHandler 请求完成的时候调用
16                 response:响应头信息
17                 fileP ath==fullPath 文件的最终目录(第三个参数回调的返回值)
18                 error:错误信息
[manager downloadTaskWithRequest:<#(nonnull NSURLRequest *)#> 
progress:<#^(NSProgress * _Nonnull downloadProgress)downloadProgressBlock#>
destination:<#^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response)destination#>
completionHandler:<#^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error)completionHandler#>]
这里要注意的是:我们可以在第二个参数回调里监听下载进度(回调返回参数downloadProgress内含参数)
downloadProgress.completedUnitCount /downloadProgress.totalUnitCount)

         而第三个参数回调是要有返回值的,返回值就是文件最终的存储位置,正如上面所说,剪切过程在内部实现,你只需要return一个地址,通常的做法,在参数response中有个建议文件名称属性(suggestedFilename),我们将它拼接到沙盒路径下就可以得到一个存储文件地址了,具体代码如下

//        沙盒路径
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
//        拼接全路径
        NSString *fullPath = [path stringByAppendingPathComponent:response.suggestedFilename];
        return fullPath ;
        

三.上传文件 

 基本用法与下载类似,响应参数也差不多,只有第三个参数需要我们注意,下面代码中已标红

 //1.创建会话管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //2.发送POST请求上传文件
    /*
     第一个参数:请求路径 NSString
     第二个参数:非文件参数
     第三个参数:constructingBodyWithBlock 用来拼接要上传的文件数据
     第四个参数:progress进度回调
     第五个参数:success 上传成功的回调
     第六个参数:failure 失败后的回调
     */
    [manager POST:@"http://120.25.226.232:32433/upload" parameters:nil 
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { //FileURL:要上传的文件的URL路径 NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/Desktop/1233.png"];//该方法是简单版本,该方法内部会自动的得到文件的名称以及文件的类型(方法里面name为服务器中存储文件的名称) [formData appendPartWithFileURL:fileUrl name:@"file" error:nil]; } progress:^(NSProgress * _Nonnull uploadProgress) { 上传进度 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"成功---%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"失败---%@",error); }]; }
先介绍这些,AFN还有很多实用的方法,下载图片、解析数据等,很方便实用有时间再多写一些.

 

 

 

 

以上是关于iOS-三方框架AFNetworking基本使用的主要内容,如果未能解决你的问题,请参考以下文章

ios开发之--使用AFNetWorking 3.1.0 ,简单的请求封装类

《iOS第三方框架》

IOS 网络浅析-(十一 三方 AFNetworking3.0简介)

第三方框架

iOS开发常用第三方框架

第三方库AFNetworking 3.1.0的简单使用