概述
虽然iOS中提供了自带的NSURLSession等一系列进行网络操作的库,但是仍然不够简单,于是就有了各种第三方网络库,其中较火的AFNetworking。
主要是AFNetworking的基本用法,展示了一个基本的get请求。
关于如何使用CocoaPods进行第三方库的引入,请参看前面的文章。
注意
iOS9之后想要使用http就要进行相应配置
返回数据头重content_type由于可能是text/html,但是AFNetworking中默认没有配置text/html,造成错误出现。解决方法在代码中已经给出,仔细看注释。
示例
配置http可以使用
iOS 9.0由于强制使用https , 所以之前使用的 http的连接 的应用如果不做特殊配制就都不可以运行了,为了解决这个问题要在工程的info.plit中添加如下配制。
示例代码
ViewController.m
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self AFNetMonitor];
[self AFNetGetData];
}
//一个简单的get请求
-(void)AFNetGetData{
//创建会话管理器对象
AFHTTPSessionManager* session = [AFHTTPSessionManager manager];
//将text/html类型添加入返回数据类型列表中(默认AFNetworking中没有,但是我们的服务器端很可能给的即使是json,但是content_type还是text/html)
session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html",@"text/json", @"text/javascript", nil];
//请求url
NSString* path = @"你的url"; //管理器对象发起get请求
//p1:url
//p2:get方法中参数可以放这里
//p3:请求头数据
//p4:下载数据的进度条控件
//p5:成功之后回调的函数块:pp1:回话任务 pp2:返回的数据
//p6:失败之后回调函数块:pp1:回话任务 pp2:错误对象
[session GET:path parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if([responseObject isKindOfClass:[NSDictionary class]]){
NSLog(@"result==%@",responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败了error==%@",error);
}];
}
//获取网络状态
-(void) AFNetMonitor{
//启动网络状态监听
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
//监听网络状态
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"网络不可用");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi网络可用");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"移动网络可用");
break;
default:
break;
}
}];
}
@end