AFNetworking3.0使用

时间:2023-03-10 06:30:19
AFNetworking3.0使用

AFHTTPSessionManager:

根据这个对象可以对请求千设置一些参数和状态

//得到一个session manager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; NSOperationQueue *operationQueue = [manager operationQueue];
// 判断网络状态
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
{
[operationQueue setSuspended:NO];
}
break; case AFNetworkReachabilityStatusNotReachable:
default:
{
[operationQueue setSuspended:YES];
} break;
}
}];

发送请求以GET为例子:

    [manager GET:@"http://apis.baidu.com/apistore/iplookupservice/iplookup" parameters:para progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
NSString *str = responseObject ;
NSLog(@"suc >>>%@" ,[NSThread currentThread]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];

这里的Block块在主线程,因为底层已经处理了

AFNetworking3.0使用

这是指定String 类型的URL 还可以不用系统帮我们封装,自己构造request

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:httpUrl parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"117.89.35.58",@"ip" ,nil] error:nil];
[request addValue:@"5560971e1657a727c71e04ce5b145798" forHTTPHeaderField:@"apikey"];

建议Request用AF建议的方法构造,AFHTTPRequestSerializer 用于构造序列化的Request,然后交给AFHTTPSessionManager处理得到一个NSURLSessionDataTask

 NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
// NSLog(@"res ===%@" , responseObject);
NSLog(@"suc >>>%@" ,[NSThread currentThread]);
NSDictionary *dic = responseObject;
NSLog(@"dic ==%@" ,dic);
}];

这里回调也是主线程

NSURLSessionDataTask有两个方法用来控制任务状态

- (void)suspend;

- (void)resume;

得到NSURLSessionDataTask之后默认状态是Suspend必须调用resume

AFJSONResponseSerializer 默认初始化@"application/json", @"text/json", @"text/javascript"有这几种,如果内容格式为就会报错@"text/plain",解决办法就是添加进去就行了