ASI的使用
导入ASI库,由于ASI库历史比较久远,是MRC的库,所以我们现在使用ARC的话需要配置,在Build Phases中的Compile Sources中加入编译标记-fno-objc-arc,既可以给ARC 项目添加MRC标记(-fno-objc-arc),也可以给MRC项目添加ARC标记(-fobjc-arc)。然后还要添加依赖 libz.dylib 、libxml2.dylib。最后配置libxml2的路径,打开工程设置信息 --->在 Search in Build Settings 中搜索 header search paths ----->添加一个路径: ${SDK_DIR}/usr/include/libxml2
ASI监测网络
- (void)asiNet{
// 网络监测
// 没网/wifi/手机网络
// 2G 20k~50K
// 3G 200K~300K
// 4G 2M
// 不加http://
Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu.com"];
// ASI 默认不会帮你去监测网络,如果需要监测网络,需要我们自己开启这个功能
[reach startNotifier];
// 添加一个观察者(监听器) 监测网络改变
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChanged:) name:kReachabilityChangedNotification object:nil];
}
- (void)networkChanged:(NSNotification *)notification{
Reachability *reach = notification.object;
// 获取当前的网络状态
NetworkStatus status = [reach currentReachabilityStatus];
NSString *str = @"";
switch (status) {
case kNotReachable:
str = @"当前无网络";
break;
case kReachableViaWiFi:
str = @"当前是Wifi";
break;
case kReachableViaWWAN:
str = @"当前是手机网络";
break;
default:
break;
}
NSLog(@"str %@",str);
}
ASI发送GET请求
- (void)asiGet{
NSString *name = @"admin";
NSString *psw = @"123456";
NSString *string = [NSString stringWithFormat:@"http://localhost/webtest/index.php?username=%@&password=%@",name,psw];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:string]];
// 设置超时时间
request.timeOutSeconds = 20;
// 设置代理
request.delegate = self;
request.tag = 1;
// 发起一个异步请求
[request startAsynchronous];
// 同步请求
// [request startSynchronous];
NSLog(@"111111111");
}
ASI发送POST请求
- (void)asiPost{
// 发送post请求
NSString *string = @"http://localhost/webtest/index.php";
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:string]];
request.tag = 2;
// 往post请求中添加参数
// 参数名key 参数的值value
[request addPostValue:@"admin" forKey:@"username"];
[request addPostValue:@"123456" forKey:@"password"];
// 自己可以指定请求完成之后的 协议方法的方法名
// [request setDidStartSelector:@selector(loginStart:)];
// [request setDidFinishSelector:@selector(loginFinish:)];
// [request setDidFailSelector:<#(SEL)#>];
request.delegate = self;
[request startAsynchronous];
}
- (void)requestStarted:(ASIHTTPRequest *)request{
NSLog(@"请求开始");
}
- (void)requestFinished:(ASIHTTPRequest *)request{
NSLog(@"请求结束 %@",request.responseString);
if (request.tag == 1){
}else{
}
}
- (void)requestFailed:(ASIHTTPRequest *)request{
NSLog(@"请求失败 %@",[request.error localizedDescription]);
}
//- (void)loginStart:(ASIHTTPRequest *)request{
// NSLog(@"开始登陆");
//}
//
//- (void)loginFinish:(ASIHTTPRequest *)request{
// NSLog(@"登陆完成");
//}
AFN的使用
ASI已经很多年不更新了,而且还是手动管理内存,虽然还有人在维护自己的版本,但是也抵不住新库的出现,AFN一直在更新,老版本的基于 NSUrlConnection ,新版本的 基于 NSUrlSession,来看一下新版老版的用法
AFN网络监测
- (void)afnNet{
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown: // 未知网络
NSLog(@"未知网络");
break;
case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
NSLog(@"没有网络(断网)");
break;
case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
NSLog(@"手机自带网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
NSLog(@"WIFI");
break;
}
}];
[mgr startMonitoring];
}
老版本的 GET请求
- (void)afnOldGet{
AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
manger.requestSerializer=[AFJSONRequestSerializer serializer];
// [manger.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//
// //申明请求的数据是json类型
manger.responseSerializer = [AFJSONResponseSerializer serializer];
// manger.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
NSString *string = @"http://localhost/webtest/index.php?username=admin&password=123456";
[manger GET:string parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, NSString *responseObject) {
NSLog(@"%@",operation.responseString);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error.localizedDescription);
}];
}
老版本的POST请求
- (void)afnOldPost{
AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
manger.requestSerializer=[AFJSONRequestSerializer serializer];
// [manger.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//
// //申明请求的数据是json类型
manger.responseSerializer = [AFJSONResponseSerializer serializer];
// manger.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
NSString *string = @"http://localhost/webtest/index.php";
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:@"admin" forKey:@"username"];
[parameters setObject:@"123456" forKey:@"password"];
[manger POST:string parameters:parameters success:^(AFHTTPRequestOperation * _Nonnull operation, NSString *responseObject) {
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error.localizedDescription);
}];
}
新版本的GET请求
- (void)afnNewGet{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSString *string = @"http://localhost/webtest/index.php?username=admin&password=123456";
[manager GET:string parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *responseObject) {
NSLog(@"111%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error.description);
}];
}
新版本的POST请求
- (void)afnNewPost{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSString *string = @"http://localhost/webtest/index.php";
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:@"admin" forKey:@"username"];
[parameters setObject:@"123456" forKey:@"password"];
[manager POST:string parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"%@",task);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",task);
}];
}
这里只是简单试用一下,其实用法是没有太大变化的~