AFNetworking
NSURLSession
NSURLSession
获取HTTP请求数据步骤:
- 实例化一个
NSURLRequest/NSMutalbeRequest
,设置要请求的url - 获取NSUrlSession实例
- 通过
dataWithRequest:completionHandle:
返回一个dataTask
- 向该对象发送消息
resume
执行这个任务 - 在
completion
中 将对象编码 返回字符串
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"https://github.com"]];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataStr);
}];
[task resume];
AFNetworking
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[[NSURL alloc] initWithString:@"hostname"]];
[manager GET:@"relative_url" parameters:nil progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@" ,responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@", error);
}];
AFNetworking默认接收json格式的响应,如果想要其它格式的 设置acceptableContentTypes
AFNetworking的调用栈
AFHTTPSessionManager
的初始化方法- initWithBaseURL:
- [AFHTTPSessionManager initWithBaseURL:] - [AFHTTPSessionManager initWithBaseURL:sessionConfiguration:]
- [AFURLSessionManager initWithSessionConfiguration:]
- [NSURLSession sessionWithConfiguration:delegate:delegateQueue:]
- [AFJSONResponseSerializer serializer] // 负责序列化响应
- [AFSecurityPolicy defaultPolicy] // 负责身份认证
- [AFNetworkReachabilityManager sharedManager] // 查看网络连接情况
- [AFHTTPRequestSerializer serializer] // 负责序列化请求
- [AFJSONResponseSerializer serializer] // 负责序列化响应- 其中
AFURLSessionManager
是AFHTTPSessionManager
的父类 AFURLSessionManager
负责生成NSURLSession
实例,并且管理AFSecurityPolicy
和AFNetworkReachabilityManager
,来保证请求的安全和查看网络连接情况,AFJSONResponseSerializer
实例用来序列号HTTP响应AFHTTPSessionManager
有自己的AFHTTPRequestSerializer
和AFJSONResponseSerializer
来管理请求和响应的序列化,同时依赖父类提供的接口保证安全、监控网络状态,实现发送HTTP
- 其中
GET:Params:progress:success:
的调用栈- [AFHTTPSessionManager GET:parameters:process:success:failure:] - [AFHTTPSessionManager dataTaskWithHTTPMethod:parameters:uploadProgress:downloadProgress:success:failure:] // 返回 NSURLSessionDataTask #1
- [AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:] // 返回 NSMutableURLRequest
- [AFURLSessionManager dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:] // 返回 NSURLSessionDataTask #2
- [NSURLSession dataTaskWithRequest:] // 返回 NSURLSessionDataTask #3
- [AFURLSessionManager addDelegateForDataTask:uploadProgress:downloadProgress:completionHandler:]
- [AFURLSessionManagerTaskDelegate init]
- [AFURLSessionManager setDelegate:forTask:]
- [NSURLSessionDataTask resume]在#3出调用了系统的请求方法,返回dataTask 然后调用
resume
方法执行请求,并在某些实践之星时通知代理AFURLSessionManagerTaskDelegate