AFNetWorking的使用方法
2016-01-11 21:48
211 查看
AFN需要注意的是,默认提交请求的数据是二进制的,返回格式是JSON
请求格式
//网络监测
//AFN提供了四种网络状态:
/*
AFNetworkReachabilityStatusUnknown = -1, // 未知
AFNetworkReachabilityStatusNotReachable = 0, // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // 局域网络,不花钱
*/
//判断网络连接状态的方法:
- (void)netWorkStatues
{
//创建AFNetworkReachabilityManager
//AFNetworkReachabilityManager *manager = [[AFNetworkReachabilityManager alloc] init];
}
//发送GET请求
//所有的网络请求都是由AFHTTPRequestOperationManager发起的
// manager.requestSerializer = [AFHTTPRequestSerializer serializer];
//发送POST请求
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
}
//上传请求UPLOAD
//创建AFHTTPSessionManager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromData:imgData progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
}];
//下载DOWNLOAD请求
/*
这样也可以进行下载任务
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
请求格式
AFHTTPRequestSerializer 二进制格式 AFJSONRequestSerializer JSON格式 AFPropertyListRequestSerializer PList(是一种特殊的XML,解析起来相对容易) 返回格式 AFHTTPResponseSerializer 二进制格式 AFJSONResponseSerializer JSON格式 AFXMLParserResponseSerializer XML,只能返回XMLParser,还需要自己通过代理方法解析 AFXMLDocumentResponseSerializer (Mac OS X) AFPropertyListResponseSerializer PList格式 AFImageResponseSerializer Image格式 AFCompoundResponseSerializer 组合格式
//网络监测
//AFN提供了四种网络状态:
/*
AFNetworkReachabilityStatusUnknown = -1, // 未知
AFNetworkReachabilityStatusNotReachable = 0, // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // 局域网络,不花钱
*/
//判断网络连接状态的方法:
- (void)netWorkStatues
{
//创建AFNetworkReachabilityManager
//AFNetworkReachabilityManager *manager = [[AFNetworkReachabilityManager alloc] init];
//获得AFNetworkReachabilityManager AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; //开启网络监测 [manager startMonitoring]; //监测到网络状态更改后的block回调 [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case -1: { //未知网络 NSLog(@"当前网络为 未知网络"); } break; case 0: { //无网络 NSLog(@"当前无网络连接"); } break; case 1: { //移动网络 NSLog(@"当前网络为 蜂窝移动网络"); } break; case 2: { //WiFi NSLog(@"当前网络为 无线网络"); } break; default: break; } }];
}
//发送GET请求
//所有的网络请求都是由AFHTTPRequestOperationManager发起的
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSString *urlStr = @"http://localhost:8080/RoyLoginAndRegisterService/LoginAndRegisterServlet"; //假如URL有中文需要编码(ios 9.0 以前可用) //NSString *encodeStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //iOS 9.0以后可用的编码方法 // NSString *encodeStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; //1,假如提交的数据格式不是二进制,需要申明请求的数据格式 //申明请求的数据格式,默认二进制格式
// manager.requestSerializer = [AFHTTPRequestSerializer serializer];
//假如请求的数据格式是json //manager.requestSerializer = [AFJSONRequestSerializer serializer]; //2,获取的数据格式默认支持json,所以假如获取的数据格式不是json,需要申明一下 //申明获取的数据格式为二进制格式 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //添加一种可以接受的数据格式 //manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil]; //设置请求头 //[manager.requestSerializer setValue:@"image/jpg" forHTTPHeaderField:@"Content-Type"]; /* //1,无参数的get请求 //发送get请求的方法 //第一个参数:请求的资源路径(URL)的字符串 //第二个参数:请求的参数 //第三个参数:成功后的回调 //第四个参数:失败后的回调 [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"请求成功了 %@",operation.responseString); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@">>>>>> %@",operation.responseString); NSLog(@"请求失败了:%@",error.localizedDescription); }]; */ //2,有参数的get请求 //AFN的get请求,参数是按照键值的方式存放在以一个字典,请求的parameters参数就是这个参数字典 NSDictionary *parameterDic = @{@"name":@"roy",@"psw":@"123456",@"command":@"1"}; [manager GET:urlStr parameters:parameterDic success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"====== %@",operation.responseString); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error ====== %@",error.localizedDescription); }];
//发送POST请求
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//申明一下接收的数据格式为二进制数据 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSString *urlStr = @"http://localhost:8080/RoyLoginAndRegisterService/LoginAndRegisterServlet"; //1,普通的表单数据 //post请求的参数部分也是按照键值进行上传的 NSDictionary *parameterDic = @{@"name":@"roy",@"psw":@"123456",@"command":@"1"}; //发送post请求 [manager POST:urlStr parameters:parameterDic success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@">>>>>>> %@",operation.responseString); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"err === %@",error.localizedDescription); }]; // 2,multi-part 数据请求(不光是表单参数,还有额外的文件数据,比如新浪微博的发送微博和图片的接口) UIImage *image = [UIImage imageNamed:@"xxx.png"]; NSData *imgData = UIImagePNGRepresentation(image); //第一个block块提供了一个AFMultipartFormData参数,就是用来提交额外文件数据(multi-part)的参数 [manager POST:urlStr parameters:parameterDic constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { //往formData参数后边追加额外的文件数据 //第一个参数:文件数据 //第二个参数:上传的文件数据,对应服务器请求参数的字段名 //第三个参数:上传的文件名。注意:文件名不可为空,并且最好文件的后缀不要省去,后缀根据上传的文件格式而定 //第四个参数:上传文件的格式,不可为空。参考请求头的Content-Type字段。比如:image/jpg [formData appendPartWithFileData:imgData name:@"pic" fileName:@"xxx.png" mimeType:@"image/png"]; //[formData appendPartWithFormData:<#(NSData *)#> name:<#(NSString *)#>] } success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }];
}
//上传请求UPLOAD
//创建AFHTTPSessionManager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//[manager.requestSerializer setValue:@"image/png" forHTTPHeaderField:@"Content-Type"]; //申明获取的数据格式 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSURL *url = [NSURL URLWithString:@"http://localhost:8080/RoyUploadFileServer/RoyUploadServlet"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //设置请求的方式(必填) [request setHTTPMethod:@"POST"]; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"123" ofType:@"mp4"]; NSData *imgData = [NSData dataWithContentsOfFile:filePath]; //设置执行上传任务时回调的block,在这个回调里边可以获取上传的进度信息 [manager setTaskDidSendBodyDataBlock:^(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { //回到主队列,进行进度刷新 dispatch_async(dispatch_get_main_queue(), ^{ _slider.value = (float)totalBytesSent/totalBytesExpectedToSend; }); NSLog(@"当前线程是%@",[[NSThread currentThread] isMainThread]?@"主线程":@"分线程"); }]; //upload请求,并且获取上传的任务 //第一个参数:请求对象 //第二个参数:上传的数据 //第三个参数:进度信息 //第四个参数:结束的回调block
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromData:imgData progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//把response转化为NSHTTPURLResponse类型 NSHTTPURLResponse *newResponse = (NSHTTPURLResponse *)response; NSLog(@">>>>> %d %@ %@",newResponse.statusCode,responseObject,error.localizedDescription); NSLog(@"====== %@",[[NSString alloc] initWithData:(NSData *)responseObject encoding:NSUTF8StringEncoding]);
}];
//[manager uploadTaskWithRequest:<#(NSURLRequest *)#> fromFile:<#(NSURL *)#> progress:<#(NSProgress *__autoreleasing *)#> completionHandler:<#^(NSURLResponse *response, id responseObject, NSError *error)completionHandler#>] //开始执行任务 [uploadTask resume];
//下载DOWNLOAD请求
/*
这样也可以进行下载任务
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager downloadTaskWithRequest:<#(NSURLRequest *)#> progress:<#(NSProgress *__autoreleasing *)#> destination:<#^NSURL *(NSURL *targetPath, NSURLResponse *response)destination#> completionHandler:<#^(NSURLResponse *response, NSURL *filePath, NSError *error)completionHandler#>] */ NSURL *url = [NSURL URLWithString:@"http://localhost:8080/RoyUploadFileServer/ybsh.mov"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //创建AFHTTPRequestOperation,并且初始化请求 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; NSString *filePath = [NSString stringWithFormat:@"%@/Documents/download.mov",NSHomeDirectory()]; NSLog(@"filePath === %@",filePath); // 设置文件保存路径 [operation setOutputStream:[NSOutputStream outputStreamToFileAtPath:filePath append:YES]]; [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { NSLog(@"当前线程是%@",[[NSThread currentThread] isMainThread]?@"主线程":@"分线程"); _slider.value = (float)totalBytesRead / totalBytesExpectedToRead; }]; //设置操作执行结束后的回调block [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"下载成功了"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"下载失败了"); }]; //开始执行操作 [operation start];
相关文章推荐
- android从网络上拿图的几个方式
- 嵌入式Linux之旅——前言
- 图解HTTP阅读笔记(1)-网络基础TCP/IP
- 确保对象的唯一性——单例模式 (五):单例模式总结
- IOS-KVC,KVO与MVC设计模式
- iOS中NSNotificationCenter的简单使用
- 史上最全github使用方法:github入门到精通
- Java Swing JTable 表格【8:表格使用选择器SelectionModel】
- IOS-Quartz2D API简单入门
- MATLAB矩阵分块函数mat2cell及cellfun函数
- 正则表达式基本语法
- C++中预处理(条件编译)
- 常用的Command对象的各属性和方法
- 归档,解档
- 即使被拖库,也可以保证密码不泄露
- java核心卷轴-----代码点和代码单元
- IOS-IOS应用的核心(一)
- 【杭电oj】1215 - 七夕节(打表,水)
- 行为型模式-观察者observer
- EasyUI 学习使用笔记