iOS开发 ----- 网络请求2 ----- 请求数据

NSURLSession请求数据

系列导航

网络请求1 —> 概览

网络请求2 —> 请求数据

网络请求3 —> 上传数据

网络请求4 —> 下载数据以及断点续传

前边BB了那么多,下边该看看应该怎么实现了,分为GET请求和POST请求,然后用分别用代理和block来实现,也就是说将有4段程序,截图就不贴了,每什么好截的,控制台打印,数据明明白白的

1.GET

1.1 GET –> block实现

必须调用resume方法,否则不会请求 所谓的block也就是在下边completionHandler这个block中编写请求数据的处理,是要存储模型还是干什么
代码部分
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //调用
    [self getDataWithBlock];

}


-(void)getDataWithBlock
{
    //请求的地址
    NSString * path = @"http://10.0.8.8/sns/my/user_list.php";
    //转为URL
    NSURL * url = [NSURL URLWithString:path];
    //初始化请求对象
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //初始化配置
    NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];
    //配置session
    NSURLSession * session = [NSURLSession sessionWithConfiguration:config];
    //初始化请求任务,以及请求完成之后要做的事
    NSURLSessionDataTask * task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        //解析JSON
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        //打印
        NSLog(@"%@",dict);

    }];
    //开始请求
    [task resume];


}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

1.2 GET –> delegate实现

和block请求方式类似,不过可以更加详细的看到相关的信息,如响应的头部信息,以及追加数据等等,相对block来说,会麻烦一点
#import "ViewController.h"

@interface ViewController ()<NSURLSessionDataDelegate>

@end

@implementation ViewController
{
    NSMutableData * _data;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    [self getDataWithDelegate];

}





-(void)getDataWithDelegate
{
    //初始化数据容器
    _data                              = [[NSMutableData alloc]init];

    //请求的地址
    NSString * path                    = @"http://10.0.8.8/sns/my/user_list.php";
    //转为URL
    NSURL * url                        = [NSURL URLWithString:path];
    //初始化请求对象
    NSURLRequest * request             = [NSURLRequest requestWithURL:url];
    //初始化配置
    NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];
    //配置session,指定代理
    NSURLSession * session             = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    //初始化任务
    NSURLSessionDataTask * task        = [session dataTaskWithRequest:request];
    //开始请求
    [task resume];

}

#pragma mark -- 收到响应时候所做的事情
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    NSLog(@"%@",response);
    //一定要调用这个方法,否则不能请求数据
    completionHandler(NSURLSessionResponseAllow);

}

#pragma mark -- 收到数据时调用的方法
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    //追加数据
    [_data appendData:data];
}

#pragma mark -- 请求完成时候调用的方法
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    if (error) {
        NSLog(@"%@",error);
    }else
    {   //解析数据
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",dict);
    }

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

2.POST

2.1 POST –> block实现

多了一点,request转为可变的,然后配置为POST即可,其他方式等同于GET请求
POST多了以点加密的功能,POST提交的数据时不可见的,所以,相对来说,性能上会损失一点

#import "ViewController.h"

@interface ViewController ()<NSURLSessionDataDelegate>

@end

@implementation ViewController
{
    NSMutableData * _data;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self getDataWithBlock];


}


-(void)getDataWithBlock
{
    //请求的地址
    NSString * path = @"http://10.0.8.8/sns/my/user_list.php";
    //转为URL
    NSURL * url = [NSURL URLWithString:path];
    //初始化请求对象
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
    //设置为POST请求
    request.HTTPMethod = @"POST";
    //初始化配置
    NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];
    //配置session
    NSURLSession * session = [NSURLSession sessionWithConfiguration:config];
    //初始化请求任务,以及请求完成之后要做的事
    NSURLSessionDataTask * task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        NSLog(@"%@",response);
        //解析JSON
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        //打印
        NSLog(@"%@",dict);

    }];
    //开始请求
    [task resume];


}






- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

2.2 POST –>代理方式

和GET几乎是一样的,多了一点,request转为可变的,然后配置为POST即可,其他方式等同于GET请求
POST多了以点加密的功能,POST提交的数据时不可见的,所以,相对来说,性能上会损失一点
#import "ViewController.h"

@interface ViewController ()<NSURLSessionDataDelegate>

@end

@implementation ViewController
{
    NSMutableData * _data;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self getDataWithDelegate];



}



-(void)getDataWithDelegate
{
    //初始化数据容器
    _data                              = [[NSMutableData alloc]init];

    //请求的地址
    NSString * path                    = @"http://10.0.8.8/sns/my/user_list.php";
    //转为URL
    NSURL * url                        = [NSURL URLWithString:path];
    //初始化请求对象
    NSMutableURLRequest * request      = [NSMutableURLRequest requestWithURL:url];
    //配置为post请求
    request.HTTPMethod                 = @"POST";

    //初始化配置
    NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];
    //配置session
    NSURLSession * session             = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    //初始化任务
    NSURLSessionDataTask * task        = [session dataTaskWithRequest:request];
    //开始请求
    [task resume];

}

#pragma mark -- 收到响应时候所做的事情
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    NSLog(@"%@",response);
    //一定要调用这个方法,否则不能请求数据
    completionHandler(NSURLSessionResponseAllow);

}

#pragma mark -- 收到数据时调用的方法
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    //追加数据
    [_data appendData:data];
}

#pragma mark -- 请求完成时候调用的方法
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    if (error) {
        NSLog(@"%@",error);
    }else
    {
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",dict);
    }

}







- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值