1、get请求
2、post请求
3、文件下载
4、文件上传
AFNetworking3.0是对NSURLSession的包装,很多细节都封装起来了,不用担心
- get请求
- (void)get {
// 创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *paramDict = @{
@"username" : @"520it",
@"pwd" : @"520it",
@"type" : @"JSON"
};
/**
* 发送get请求
* 第一个参数:请求路径(不包含参数)
* 第二个参数:字典(发送给服务器的数据)
* 第三个参数:progress 进度回调
* 第四个参数:success 成功回调
* 第五个参数:failure
*/
[manager GET:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
- post请求
- (void)post {
// 创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *paramDict = @{
@"username" : @"520it",
@"pwd" : @"520it",
@"type" : @"JSON"
};
/**
* 发送post请求
* 第一个参数:请求路径(不包含参数)
* 第二个参数:字典(发送给服务器的数据)
* 第三个参数:progress 进度回调
* 第四个参数:success 成功回调
* 第五个参数:failure
*/
[manager POST:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
- 下载。 这里有一些注意的地方
- manager有返回值,需要接收之后开启任务。
- destination有返回值
- (void)dowLoad {
// 创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_04.mp4"]];
/**
* 文件下载
* 参数1:请求对象
* 参数2:progress 进度回调 completedUnitCount已完成 / totalUnitCount总的
* 参数3:destination 回调(目标位置)
有返回值
targetPath 临时文件路径
response 响应头信息
* 参数4:completionHandler 下载完成后的回调
filePath 文件路径
*/
NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"%f", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
return [NSURL fileURLWithPath:fullPath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
}];
// 执行task
[download resume];
}
- 上传文件
- (void)upLoad {
// 创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 发送post请求上传文件
/**
* 参数1:请求路径
* 参数2:字典(非文件参数)
* 参数3:constructingBodyWithBlock 处理要上传的文件数据
* 参数4:进度回调
* 参数5:上传成功回调 responseObject响应体信息
*/
[manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
// UIImage *image = [UIImage imageNamed:@"xmg"];
// NSData *imageData = UIImagePNGRepresentation(image);
// 使用formData来拼接数据
/**
* 参数1:二进制数据,要上传的文件参数
* 参数2:服务器规定的
* 参数3:该文件上传到服务器以什么名称保存
*/
// [formData appendPartWithFileData:imageData name:@"file" fileName:@"xxx.png" mimeType:@"image/png"];
// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/mac2/Desktop/xmg.png"] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/mac2/Desktop/xmg.png"] name:@"file" error:nil];
} progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"%f", 1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"上传成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上传失败");
}];
}
- AFN判断网络状态
AFNetworkReachabilityManager * manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
/*
AFNetworkReachabilityStatusUnknown = -1,
AFNetworkReachabilityStatusNotReachable = 0,
AFNetworkReachabilityStatusReachableViaWWAN = 1,
AFNetworkReachabilityStatusReachableViaWiFi = 2,
*/
switch (status) {
case AFNetworkReachabilityStatusUnknown:
MH_LOG(@"网络状态未知");
break;
case AFNetworkReachabilityStatusNotReachable:
MH_LOG(@"没有网络");
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotReachable" object:nil];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
MH_LOG(@"3G|4G蜂窝移动网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
MH_LOG(@"WIFI网络");
break;
default:
break;
}
}];
开始监听
[manager startMonitoring];