一、什么是AFN
- 全称是AFNetworking,是对NSURLConnection的一层封装
- 虽然运行效率没有ASI高,但是使用比ASI简单
-
在iOS开发中,使用比较广泛
-
AFN的github地址
- https://github.com/pokeb/AFNetworking/AFNetworking
二、AFN结构
-
NSURLConnection
- AFURLConnectionOperation
- AFHTTPRequestOperation
-
AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)
-
属性
- baseURL :AFN建议开发者针对 AFHTTPRequestOperationManager 自定义个一个单例子类,设置 baseURL, 所有的网络访问,都只使用相对路径即可
- requestSerializer :请求数据格式/默认是二进制的 HTTP
- responseSerializer :响应的数据格式/默认是 JSON 格式
- operationQueue
- reachabilityManager :网络连接管理器
-
方法
- manager :方便创建管理器的类方法
- HTTPRequestOperationWithRequest :在访问服务器时,如果要告诉服务器一些附加信息,都需要在 Request 中设置
- GET
- POST
-
-
NSURLSession
- AFURLSessionManager
-
AFHTTPSessionManager(封装了常用的 HTTP 方法)
- GET
- POST
- UIKit + AFNetworking 分类
- NSProgress :利用KVO
-
半自动的序列化&反序列化的功能
- AFURLRequestSerialization :请求的数据格式/默认是二进制的
- AFURLResponseSerialization :响应的数据格式/默认是JSON格式
-
附加功能
-
安全策略
- HTTPS
- AFSecurityPolicy
-
网络检测
- 对苹果的网络连接检测做了一个封装
- AFNetworkReachabilityManager
-
三、AFN基本使用
1.AFHTTPSessionManager
- 是AFN中最重要的对象之一
- 封装了HTTP请求的常见处理
- GET\POST请求
- 解析服务器的响应数据
创建AFHTTPSessionManager
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
AFHTTPSessionManager的GET\POST请求
// GET请求 /* http://120.25.226.186:32812/login?username=520it&pwd=520it 第一个参数: 请求的地址 http://120.25.226.186:32812/login 第二个参数: 请求的参数 username=520it&pwd=520it 第三个参数: 请求成功的回调 第四个参数: 请求失败的回调 只要利用AFN发送请求, 如果服务器返回的是JSON数据, 那么AFN会自动将JSON转会成OC对象返回给我们 */ - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure // POST请求 - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
代码示例
// GET - (void)get2 { // 1.创建AFN管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.利用AFN管理者发送请求 NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"请求成功---%@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"请求失败---%@", error); }]; } // POST - (void)post2 { // 1.创建AFN管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.利用AFN管理者发送请求 NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [manager POST:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"请求成功---%@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"请求失败---%@", error); }]; }
2.AFHTTPRequestOperationManager
创建AFHTTPRequestOperationManager
// 1.创建AFN管理者 // AFHTTPRequestOperationManager内部包装了NSURLConnection AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPRequestOperationManager的GET\POST请求
// GET - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure // POST请求 - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
代码示例
- (void)get
{
// 1.创建AFN管理者
// AFHTTPRequestOperationManager内部包装了NSURLConnection
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 2.利用AFN管理者发送请求
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败---%@", error);
}];
}
- (void)post
{
// 1.创建AFN管理者
// AFHTTPRequestOperationManager内部包装了NSURLConnection
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 2.利用AFN管理者发送请求
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manager POST:@"http://120.25.226.186:32812/login" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败---%@", error);
}];
}