1.4网络请求AFNetworking

2019-04-18  本文已影响0人  草根小强

网络请求AFNetworking

1.NSURLConnection /NSURLSession 都是系统原生的数据请求;
2:ASIHTTPRequest 是一个网络请求的库,前几年非常火,停更了。。。(停止更新了);
3:AFNetWorking 现在最火的一个网络请求的第三方库,是gittub 上下载量排行第一的团体库
4:HTTP请求,有很多种方式 默认GET 请求 , POST请求的安全性更高一些;

    //NSURLConnection /NSURLSession 都是系统原生的数据请求
    
    //原生意味着稳定,不好用,使用麻烦
    
    //在实际开发中,网络请求要么自己封装一个  要么已经封装好的第三方库
    
    
    // ASIHTTPRequest
    //是一个网络请求的库,前几年非常火
    
    //MRC,如果需要再ARC工程种运用,需要进行混编 -fno-objc-arc
    
    //回调, 是通过协议的方式来实现的。
    
    //停更了。。。(停止更新了)
    
    
    
    //AFNetWorking
    //现在最火的一个网络请求的第三方库,是gittub 上下载量排行第一的团体库
    //ARC ,
    //回调, 是通过block来实现的,使用方便
    
    
    
    // 网络请求,需要去获取服务器上的某些数据
    
    //1. 给服务器发送一个数据请求 (Resquset)
    
    //2.接收服务器给我们的响应(Response)
    
    
    
    // HTTP请求,有很多种方式
    //GET / POST  最常用
    
    //GET : 请求是把所有的参数,直接拼接到接口后面,做成一个URL, 发送请求
    //默认GET 请求
    //POST : 从接口中,只能看到要访问的文件,把参数做成一个表单,发送给服务器
    
    
    //区别:
    //1. POST请求的安全性更高一些
    
    //2. GET 请求效率更高一些
    
    //3. 大小限制: GET请求2kb, POST请求理论上是无限制的
    
    //4. 上传文件,必须用POST (因为GET请求大小有限制)
    
    
    //结论: 如果牵涉到表单内容修改,用POST (如:修改用户名), 如果只是一个查询的查询的操作(如:查询好友)

案列

#import "ViewController.h"
#import "AFNetworking.h"

#define BASE_URL @"http://iappfree.candou.com:8080/free/applications/limited"

#define IMG_URL @"http://a.hiphotos.baidu.com/image/pic/item/55e736d12f2eb938d3de795ad0628535e4dd6fe2.jpg"

#define QiuBai @"http://m2.qiushibaike.com/article/list/suggest"

#define LOGIN @"http://10.0.8.8/sns/my/friend.php"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //GET 请求
    [self GET];
    
    //[self momitor];
    //POST 请求
   //[self POST];
}
/**用AFNetworking做一个GET请求*/
- (void)GET{
    //1.  实例化一个 AFHTTPRequestOperationManager 对象
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
#warning AFNetworking 会自动的将数据的请求结果(data)进行格式转换(dict),想关闭数据自动解析
    //AFNetworking 会自动的将数据的请求结果(data)进行格式转换(dict)
    // 想关闭数据自动解析
//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    // 添加响应的数据处理格式
//    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    
//     manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
    //2. GET 请求
    //1.要请求的接口 NSString
    //2.要传递的参数  字典
    //3.请求成功的回调
    //4.请求失败的回调
   
//#if 1
    //无参get的请求
    [manager GET:@"http://u1.tiyufeng.com/v2/section/content_list?portalId=15&id=352&start=33&limit=10&portalId=15&clientToken=8ca9cbf2da97c2857a324f6612083830" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        // 请求成功的回调
        NSLog(@"%@",responseObject);
        
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //请求错误的回调 (失败的回调)
        
        NSLog(@"%@",error);
    }];
    
//#else
    //有参数的GET 请求
    //
  /*  NSDictionary *dic = @{@"count":@20,@"page":@1};
    
    //这个方法, 会把我们传递的参数,拼接到接口地址后面
    
    [manager GET:QiuBai parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //请求成功
        NSLog(@"%@",responseObject);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //请求失败
        NSLog(@"%@",error);
        
    }];
    
    */
//#endif
    
}
/**用AFNetworking做一个POST 请求*/
- (void) POST {
    // 1. 获取单例
    
    AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    

    //2.POST请求
    NSDictionary *dict = @{@"uid":@123123};
    
    
    [manager POST:IMG_URL parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *result = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"-----%@",result);
        //成功的回调
//        NSLog(@"%@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
        //失败的回调
        NSLog(@"%@",error);
    }];
   
    /*
     只有上传文件才会使用
    manager POST:<#(NSString *)#> parameters:<#(id)#> constructingBodyWithBlock:<#^(id<AFMultipartFormData> formData)block#> success:<#^(AFHTTPRequestOperation *operation, id responseObject)success#> failure:<#^(AFHTTPRequestOperation *operation, NSError *error)failure#>
     
     */
    
}
/**网络状态监听*/

- (void)momitor{
    //要保证这个manager 这个对象不被释放,才能正常进行监听
    
    
    //获取一个manager单例
    
    AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
    
    //设置网络状态发生变化后的回调
    [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        //在这里,需要对网络状态发生变化后,进行处理
        /**
        AFNetworkReachabilityStatusUnknown          = -1,//未知
         
        AFNetworkReachabilityStatusNotReachable     = 0,//无连接
         
        AFNetworkReachabilityStatusReachableViaWWAN = 1,//移动网络/蜂窝移动网络
         
        AFNetworkReachabilityStatusReachableViaWiFi = 2,//WiFi
         
        */
        
        NSArray *messages = @[@"未知,你在荧惑把?",@"没有网络,手机欠费了",@"土豪,任信",@"屌丝。。。。"];
        NSLog(@"%@",messages [status + 1]);
        
        
    }];
    
    
    //3. 开始监听
    [manager.reachabilityManager startMonitoring];
    
    
    
}

@end
上一篇 下一篇

猜你喜欢

热点阅读