iOS学习笔记(二十九)————网络请求三方库 ASI && AFN 使用

/ 0评 / 0

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

ASIHTTPRequest

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);
    }];
}

这里只是简单试用一下,其实用法是没有太大变化的~

代码请查看 http://git.oschina.net/zcb1603999/LearningiOS

评论已关闭。