AFN

一、2大管理对象
1.AFHTTPRequestOperationManager
* 对NSURLConnection的封装

2.AFHTTPSessionManager
* 对NSURLSession的封装

二、AFHTTPRequestOperationManager的具体使用
1.创建管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"哈哈哈";
params[@"pwd"] = @"123";

3.发送请求
NSString *url = @"http://localhost:8080/MJServer/login";
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];
// GET请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];

 

三、文件上传demo

// 1.创建一个管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

// 2.封装参数(这个字典只能放非文件参数)
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"123";
params[@"age"] = @20;
params[@"pwd"] = @"456";
params[@"height"] = @1.55;

// 2.发送一个请求
NSString *url = @"http://localhost:8080/MJServer/upload";
[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// 在发送请求之前会自动调用这个block
// 需要在这个block中添加文件参数到formData中

/**
FileURL : 需要上传的文件的URL路径
name : 服务器那边接收文件用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的文件类型
*/
NSURL *url = [[NSBundle mainBundle] URLForResource:@"itcast" withExtension:@"txt"];
[formData appendPartWithFileURL:url name:@"file" fileName:@"test.txt" mimeType:@"text/plain" error:nil];

/**
FileData : 需要上传的文件的具体数据
name : 服务器那边接收文件用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的文件类型
*/
// UIImage *image = [UIImage imageNamed:@"minion_01"];
// NSData *fileData = UIImagePNGRepresentation(image);
// [formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.png" mimeType:@"image/png"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"上传成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"上传失败");
}];

四、对服务器返回数据的解析
1.AFN可以自动对服务器返回的数据进行解析
* 默认将服务器返回的数据当做JSON来解析

2.设置对服务器返回数据的解析方式
1> 当做是JSON来解析(默认做法)
* mgr.responseSerializer = [AFJSONResponseSerializer serializer];
* responseObject的类型是NSDictionary或者NSArray

2> 当做是XML来解析
* mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
* responseObject的类型是NSXMLParser

3> 直接返回data
* 意思是:告诉AFN不要去解析服务器返回的数据,保持原来的data即可
* mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

3.注意
* 服务器返回的数据一定要跟responseSerializer对得上
1> 服务器返回的是JSON数据
* AFJSONResponseSerializer
* AFHTTPResponseSerializer

2> 服务器返回的是XML数据
* AFXMLParserResponseSerializer
* AFHTTPResponseSerializer

3> 服务器返回的是其他数据
* AFHTTPResponseSerializer

已标记关键词 清除标记
相关推荐
项目介绍: 断点续传下载器:任务新建后即会在tmp文件夹生成对应的临时文件(.tmp),断点续传的主要原理就是保存.tmp文件的路径, 下次重新新建任务时,如果存在.tmp文件则采用续传的方式建立任务,否则正常建立任务。 使用方法: LEResumeBrokenDownload *downloader=//快速初始化,初始化后立即下载 [[LEResumeBrokenDownload alloc] initWithDelegate:self Identifier:nil URL:@""]; [downloader lePauseDownload];//暂停 [downloader leResumeDownload];//继续 if(downloader.leDownloadState==LEResumeBrokenDownloadStateCompleted){//完成下载后打开文件 NSString *path=[downloader leDownloadedFilePath]; NSLog(@"open file at %@",path); } 回调: /* * @brief 下载完成或者失败时回调 */ -(void) leOnDownloadCompletedWithPath:(NSString *) filePath Error:(NSError *) error Identifier:(NSString *) identifier; @optional /* * @brief 下载进度回调 */ -(void) leDownloadProgress:(float) progress Identifier:(NSString *) identifier; /* * @brief 当前网络切换到 蜂窝移动网络时回调 */ -(void) leOnAlertWhenSwitchedToWWANWithIdentifier:(NSString *) identifier; /* * @brief 当前网络不可用时回调 */ -(void) leOnAlertForUnreachableNetworkWithIdentifier:(NSString *) identifier; /* * @brief 当前 蜂窝移动网络已打开,但是设置了禁用而无法使用时回调 */ -(void) leOnAlertForUnreachableNetworkViaWWANWithIdentifier:(NSString *) identifier; /* * @brief 当前下载状态切换时回调,主要用于UI状态更新 */ -(void) leOnDownloadStateChanged:(LEResumeBrokenDownloadState) state Identifier:(NSString *) identifier; git地址 :https://github.com/LarryEmerson/LE_AFNetworking 支持pod: platform :ios, '7.0' target "xxxx" do pod 'LE_AFNetworking' end
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页