- GET&POST 请求
- 文件下载
- 文件上传
- 序列化处理
- 监听网络状态
GET 方式发送请求
- (void)get{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dic = @{
@"username":@"520it",
@"pwd":@"520it",
@"type":@"JSON"
};
// 2 发送GET请求
/* 参数说明
* 第一个参数:请求路径 NSString类型 不可以包含参数
* 第二个参数:参数信息字典
* 第三个参数:progress 进度回调
* 第四个参数:success 成功回调
* task: 请求任务 可以通过task得到响应头信息
* responseObject: 响应体 AFN内部默认对服务器返回的数据进行JSON解析
* 第五个参数:failure 失败回调
*/
[manager GET:@"http://120.25.226.186:32812/login" parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"请求成功 -- %@,%@",[responseObject class],responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败-- %@",error);
}];
}
POST方式发送请求
- (void)post{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dic = @{
@"username":@"520it",
@"pwd":@"520it",
@"type":@"JSON"
};
// 2 发送POST请求
[manager POST:@"http://120.25.226.186:32812/login" parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"请求成功 -- %@,%@",[responseObject class],responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败-- %@",error);
}];
}
文件下载
- (void)download{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2 创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/zhidao/pic/item/a71ea8d3fd1f4134fadc747f261f95cad0c85ec3.jpg"]];
// 3 创建请求任务
/* 参数说明
* 第一个参数:请求对象
* 第二个参数:progress 进度回调
* 第三个参数:destination回调 需要在该回调中告诉方法应该把下载的文件保存哪里
targetPath: 默认写入的临时保存路径 (tmp)
response: 响应头信息
返回值: 文件应该保存的路径
* 第四个参数:completionHandler 完成后回调
*/
NSURLSessionDownloadTask * downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
//监听下载进度 = 已完成的下载大小 / 总的数据大小
NSLog(@"---- %f",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
//拼接文件的存储路径给AFN AFN内部会自动完成剪切路径的处理 从临时路径到指定的路径
NSString * fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
NSLog(@"fullPath = %@",fullPath);
NSLog(@"targetPath = %@",targetPath);
return [NSURL fileURLWithPath:fullPath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
//filePath 文件路径 == destination 回调的返回值
NSLog(@"filePath -- %@",filePath);
}];
// 4 执行下载任务
[downloadTask resume];
}
文件上传
- (void)upload{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dic = @{
@"username":@"123abc",
};
/* 参数说明
* 第一个参数:请求路径string
* 第二个参数:非文件参数
* 第三个参数:constructingBodyWithBlock 处理要上传的文件参数信息
* 第四个参数:progress 上传进度
* 第五个参数:success 成功后回调
responseObject 响应体信息 (内部已经完成了对JSON的解析)
* 第六个参数:failure 失败后回调
*/
[manager POST:@"http://120.25.226.186:32812/upload" parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/a58/Desktop/123.png"];
//处理要上传的文件
// 第一种方式 处理要上传的文件
/* 参数说明
*
* 第一个参数:要上传的文件的二进制数据
* 第二个参数:具体参数值 file
* 第三个参数:文件名称
* 第四个参数:文件的二进制数据类型
*/
// [formData appendPartWithFileData:imageData name:@"file" fileName:@"123.png" mimeType:@"image/png"];
// 第二种方式 处理要上传的文件
// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/a58/Desktop/123.png"] name:@"file" fileName:@"123.png" mimeType:@"image/png" error:nil];
// 第三种方式 处理要上传的文件
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/a58/Desktop/123.png"] name:@"file" error:nil];
// AFN 内部会处理 fileName 和 mimeType
/*
NSParameterAssert(fileURL);
NSParameterAssert(name);
NSString *fileName = [fileURL lastPathComponent];
NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]);
return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error];
*/
} progress:^(NSProgress * _Nonnull uploadProgress) {
//监听进度
NSLog(@"---- %f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"success --- responseObject -- %@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@" failure --- error -- %@",error);
}];
}
监听网络状态
- (void)netChange{
// 1 创建网络监听对象
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
// 2 监听
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"无网络");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"蜂窝网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
default:
break;
}
}];
// 3 开始监听
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
序列化处理
//既不是json格式 也不是xml格式
- (void)httpData{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//内部 内部已经默认对服务器返回的数据进行了JSON解析操作 AFJSONResponseSerializer
//如果返回的数据既不是JSON格式 也不是XML格式 需要修改manager对响应的解析方式 为 AFHTTPResponseSerializer
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
/*
01 如果返回的数据是json格式 不需要处理
02 如果返回的数据是xml格式 manager.responseSerializer = [AFXMLParserResponseSerializer serializer]
03 如果返回的数据既不是json格式 也不是xml格式 manager.responseSerializer = [AFHTTPResponseSerializer serializer]
*/
//2 发送请求
[manager GET:@"http://baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject --%@",responseObject);
NSLog(@"httpData --- %@",[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error --%@",error);
}];
}
- (void)xml{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//内部 内部已经默认对服务器返回的数据进行了JSON解析操作 AFJSONResponseSerializer
//如果返回的数据为XML类型 需要修改manager对响应的解析方式 为 AFXMLParserResponseSerializer
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
//2 发送请求
//http://120.25.226.186:32812/video
[manager GET:@"http://120.25.226.186:32812/video" parameters:@{@"type":@"XML"} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject --%@",responseObject);
//使用NSXMLParser 解析数据
// 01 创建解析器
NSXMLParser *parse = (NSXMLParser *)responseObject;
// 02 设置代理
parse.delegate = (id<NSXMLParserDelegate>)self;
// 03 开始解析
[parse parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error --%@",error);
}];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{
}
- (void)json{
// 1 创建会话管理对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//内部 内部已经默认对服务器返回的数据进行了JSON解析操作 AFJSONResponseSerializer
//发送请求
[manager GET:@"http://120.25.226.186:32812/video" parameters:@{@"type":@"JSON"} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject --%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error --%@",error);
}];
}
#pragma mark ------------
xml 处理结果log
2018-04-08 18:04:41.000926+0800 AFN基本使用(GET&POST&上传&下载)[2808:196985] responseObject --<3c68746d 6c3e0a3c 6d657461 20687474 702d6571 7569763d 22726566 72657368 2220636f 6e74656e 743d2230 3b75726c 3d687474 703a2f2f 7777772e 62616964 752e636f 6d2f223e 0a3c2f68 746d6c3e 0a>
2018-04-08 18:04:41.001048+0800 AFN基本使用(GET&POST&上传&下载)[2808:196985] httpData --- <html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
网友评论