AFNetWorking使用
2018-11-08 本文已影响16人
00d1ed2b53ae
GET请求
-(void)get
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.封装参数
NSDictionary *dict = @{
@"username":@"Lion",
@"pwd":@"1314",
@"type":@"JSON"
};
//3.发送GET请求
/*
第一个参数:请求路径(NSString)+ 不需要加参数
第二个参数:发送给服务器的参数数据
第三个参数:progress 进度回调
第四个参数:success 成功之后的回调(此处的成功或者是失败指的是整个请求)
task:请求任务
responseObject:注意!!!响应体信息--->(json--->oc))
task.response: 响应头信息
第五个参数:failure 失败之后的回调
*/
[manager GET:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"success--%@--%@",[responseObject class],responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"failure--%@",error);
}];
}
POST
[manager POST:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"success--%@--%@",[responseObject class],responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"failure--%@",error);
}];
下载
-(void)download
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.确定请求路径
NSURL *url = [NSURL URLWithString:@"需要请求的URL"];
//3.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//4.发送网络请求下载文件
/*
第一个参数:请求对象
第二个参数:progress 进度回调
downloadProgress
@property int64_t totalUnitCount;
@property int64_t completedUnitCount;
第三个参数:destination 让我们告诉系统应该把文件存放到什么地方
内部自动的完成剪切处理
第四个参数: completionHandler 完成之后的回调
response 响应头信息
filePath 文件最终的存储路径
error 错误信息
*/
[[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];
NSLog(@"fullpath == %@",fullpath);
return [NSURL fileURLWithPath:fullpath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
NSLog(@"%@",filePath);
}] resume];
}
上传
-(void)upload
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.发送请求上传文件
/*
第一个参数:请求路径(NSString)
第二个参数:非文件参数
第三个参数:constructingBodyWithBlock 拼接数据(告诉AFN要上传的数据是哪些)
第四个参数:progress 进度回调
第五个参数:success 成功回调
responseObject:响应体
第六个参数:failure 失败的回调
*/
[manager POST:@"需要请求的URL" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSData *data = [NSData dataWithContentsOfFile:@"/Users/apple/Desktop/Snip20160409_148.png"];
//拼接数据
/*
第一个参数:文件参数 (二进制数据)
第二个参数:参数名~file
第三个参数:该文件上传到服务器以什么名称来保存
第四个参数:
*/
[formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"success--%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"failure -- %@",error);
}];
}
JSON解析
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
/*
1)afn内部默认已经完成了JSON解析工作
优点:方便
缺点:如果服务器返回的数据不是JSON会报错
*/
NSDictionary *dict = @{@"type":@"JSON"};
//2.发请求
[manager GET:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@--%@",[responseObject class],responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@---",error);
}];
xml解析
-(void)xml
{
<NSXMLParserDelegate>代理协议
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//设置以XML的方式来解析数据
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
NSDictionary *dict = @{@"type":@"XML"};
//2.发请求
[manager GET:@"需要请求的URL" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@--%@",[responseObject class],responseObject);
//1.创建解析器
NSXMLParser *parser = (NSXMLParser *)responseObject;
//2.设置代理
parser.delegate = self;
//3.开始解析
[parser parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@---",error);
}];
}
检测网络状态
-(void)networkStatusChangeAFN
{
//1.获得一个网络状态监听管理者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
//2.监听状态的改变(当网络状态改变的时候就会调用该block)
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
/*
AFNetworkReachabilityStatusUnknown = -1, 未知
AFNetworkReachabilityStatusNotReachable = 0, 没有网络
AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G|4G
AFNetworkReachabilityStatusReachableViaWiFi = 2, WIFI
*/
switch (status) {
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G|4G");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"没有网络");
break;
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知");
break;
default:
break;
}
}];
//3.手动开启 开始监听
[manager startMonitoring];
}