//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、AFN 版本的概念
在AFNetworking 3.0之前,底层是通过封装NSURLConnection来实现的。
在AFNetworking 3.0之后,也就是在iOS9.0 之后,NSURLConnection被弃用,苹果推荐使用NSURLSession来管理网络请求,所以AFNetworking 3.0之后,底层是通过封装NSURLSession来实现的。
从AFNetworking 3.0中之后,下面三个方法被弃用了。
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
依次被下面三个类代替了,同时请求方法也跟着改变了,所以AFNetworking 3.0以后发生了很大的变化。
AFURLSessionManager
AFHTTPSessionManager
AFNetworkReachabilityManager
二、GET请求
//创建请求管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer= [AFHTTPResponseSerializer serializer];//内容类型manager.responseSerializer.acceptableContentTypes= [NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",nil];//get请求[manager GET:URL parameters:nilprogress:^(NSProgress * _Nonnull downloadProgress) {//数据请求的进度} success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//数据请求成功后,返回 responseObject 结果集} failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//数据请求失败,返回错误信息原因 error}];
详细内容链接:http://write.blog.csdn.net/postedit/75331411
三、POST 请求
//创建请求管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//manager.responseSerializer= [AFHTTPResponseSerializer serializer];//内容类型manager.responseSerializer.acceptableContentTypes= [NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",nil];NSMutableDictionary*parameters = @{@"":@"",@"":@""}.mutableCopy;//post请求[manager POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {//数据请求的进度} success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//数据请求成功后,返回 responseObject 结果集} failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//数据请求失败,返回错误信息原因 error}];
四、下载
- (void)downLoad{//1.创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.确定请求的URL地址NSURL*url = [NSURLURLWithString:@""];//3.创建请求对象NSURLRequest*request = [NSURLRequestrequestWithURL:url];//下载任务NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {//打印下下载进度WKNSLog(@"%lf",1.0* downloadProgress.completedUnitCount/ downloadProgress.totalUnitCount); } destination:^NSURL* _Nonnull(NSURL* _Nonnull targetPath, NSURLResponse * _Nonnull response) {//下载地址WKNSLog(@"默认下载地址:%@",targetPath);//设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象NSString*filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,YES)lastObject];return[NSURLURLWithString:filePath]; } completionHandler:^(NSURLResponse * _Nonnull response,NSURL* _Nullable filePath,NSError* _Nullable error) {//下载完成调用的方法WKNSLog(@"下载完成:"); WKNSLog(@"%@--%@",response,filePath); }];//开始启动任务[task resume];}
五、上传
/**
* AFN 3.0 上传
* 有两种方式
* upLoad1 和 upLoad2
*///第一种方法是通过工程中的文件进行上传- (void)upLoad1{//1。创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.上传文件NSDictionary*dict = @{@"username":@"1234"};NSString*urlString = @"22222"; [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id _Nonnull formData) {//上传文件参数UIImage*iamge = [UIImageimageNamed:@"123.png"]; NSData *data = UIImagePNGRepresentation(iamge);//这个就是参数[formData appendPartWithFileData:data name:@"file"fileName:@"123.png"mimeType:@"image/png"]; } progress:^(NSProgress * _Nonnull uploadProgress) {//打印下上传进度WKNSLog(@"%lf",1.0*uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount); } success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//请求成功WKNSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//请求失败WKNSLog(@"请求失败:%@",error); }];}//第二种是通过URL来获取路径,进入沙盒或者系统相册等等- (void)upLoda2{//1.创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.上传文件NSDictionary*dict = @{@"username":@"1234"};NSString*urlString = @"22222"; [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id _Nonnull formData) { [formData appendPartWithFileURL:[NSURLfileURLWithPath:@"文件地址"] name:@"file"fileName:@"1234.png"mimeType:@"application/octet-stream"error:nil]; } progress:^(NSProgress * _Nonnull uploadProgress) {//打印下上传进度WKNSLog(@"%lf",1.0*uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount); } success:^(NSURLSessionDataTask * _Nonnull task,id_Nullable responseObject) {//请求成功WKNSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task,NSError* _Nonnull error) {//请求失败WKNSLog(@"请求失败:%@",error); }];}监测当前网络状态(网络监听)- (void)AFNetworkStatus{//1.创建网络监测者AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];/*枚举里面四个状态 分别对应 未知 无网络 数据 WiFi
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, 未知
AFNetworkReachabilityStatusNotReachable = 0, 无网络
AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窝数据网络
AFNetworkReachabilityStatusReachableViaWiFi = 2, WiFi
};
*/[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {//这里是监测到网络改变的block 可以写成switch方便//在里面可以随便写事件switch(status) {caseAFNetworkReachabilityStatusUnknown: WKNSLog(@"未知网络状态");break;caseAFNetworkReachabilityStatusNotReachable: WKNSLog(@"无网络");break;caseAFNetworkReachabilityStatusReachableViaWWAN: WKNSLog(@"蜂窝数据网");break;caseAFNetworkReachabilityStatusReachableViaWiFi: WKNSLog(@"WiFi网络");break;default:break; } }] ;}
谢谢!!!