AFN 是最常用的网络框架, AFN 内部封装了 NSURLConnection 和 NSURLSession
其中:
AFHTTPRequestOperationManager 是对 NSURLConnection 的封装;
AFHTTPSessionManager 是对 NSURLSession 的封装.
AFN 的使用非常简单:
总共分为两步: 1. 创建网络请求管理者; 2. 封装请求参数; 3.发送请求.
// 1. 创建网络请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2. 封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"zhangsan";
params[@"password"] = @"zhang";
// 3. 发送网络请求 ,AFN 中最常用的两个请求就是 GET 请求 和 POST 请求
{
// GET请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];
// POST请求
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];
}
}
/*------------------------------------- AFN 数据解析 ----------------------------------------*/
重点: 针对不同的网络请求,设置不同的数据解析器
{
<1> AFN 可以自动对服务器返回的数据进行解析,默认将服务器返回的数据当做 JSON 数据解析.
必须按照服务器返回的数据格式,选择不同的解析器.不然,就会报错,得不到想要的数据.
{
// 创建网络请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 1. 默认情况下,网络请求的管理者的解析器如下:
// 由于返回的是 JSON 数据,所以从服务器返回的数据:responseObject 的类型是 NSDictionary 或者 NSArray
mgr.responseSerializer = [AFJSONResponseSerializer serializer];
// 2. 如果服务器返回的是 XML 数据,那么必须设置网络请求管理者的解析器类型如下:
// 这时,服务器返回的数据 responseObject 的数据类型是 NSXMLParser
mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
// 3. 如果服务器返回的是 data(比如:文件数据),这时需要告诉 AFN 不要去解析服务器返回的数据,保持原来的 data 数据就可以了.
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
}
<2> 需要特别注意的是,服务器返回的数据一定要跟 responseSerializer 相对应.对应关系如下:
{
1> 服务器返回的是JSON数据
* AFJSONResponseSerializer
* AFHTTPResponseSerializer
2> 服务器返回的是XML数据
* AFXMLParserResponseSerializer
* AFHTTPResponseSerializer
3> 服务器返回的是其他数据
* AFHTTPResponseSerializer
}
}
其中:
AFHTTPRequestOperationManager 是对 NSURLConnection 的封装;
AFHTTPSessionManager 是对 NSURLSession 的封装.
AFN 的使用非常简单:
总共分为两步: 1. 创建网络请求管理者; 2. 封装请求参数; 3.发送请求.
// 1. 创建网络请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2. 封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"zhangsan";
params[@"password"] = @"zhang";
// 3. 发送网络请求 ,AFN 中最常用的两个请求就是 GET 请求 和 POST 请求
{
// GET请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];
// POST请求
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];
}
}
/*------------------------------------- AFN 数据解析 ----------------------------------------*/
重点: 针对不同的网络请求,设置不同的数据解析器
{
<1> AFN 可以自动对服务器返回的数据进行解析,默认将服务器返回的数据当做 JSON 数据解析.
必须按照服务器返回的数据格式,选择不同的解析器.不然,就会报错,得不到想要的数据.
{
// 创建网络请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 1. 默认情况下,网络请求的管理者的解析器如下:
// 由于返回的是 JSON 数据,所以从服务器返回的数据:responseObject 的类型是 NSDictionary 或者 NSArray
mgr.responseSerializer = [AFJSONResponseSerializer serializer];
// 2. 如果服务器返回的是 XML 数据,那么必须设置网络请求管理者的解析器类型如下:
// 这时,服务器返回的数据 responseObject 的数据类型是 NSXMLParser
mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
// 3. 如果服务器返回的是 data(比如:文件数据),这时需要告诉 AFN 不要去解析服务器返回的数据,保持原来的 data 数据就可以了.
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
}
<2> 需要特别注意的是,服务器返回的数据一定要跟 responseSerializer 相对应.对应关系如下:
{
1> 服务器返回的是JSON数据
* AFJSONResponseSerializer
* AFHTTPResponseSerializer
2> 服务器返回的是XML数据
* AFXMLParserResponseSerializer
* AFHTTPResponseSerializer
3> 服务器返回的是其他数据
* AFHTTPResponseSerializer
}
}