网络请求 __ NSURLSession

首先配置into.plist文件

1. 添加 App Transport Security Settings , Type栏自动变为Dictionary

2. 点击左边箭头,使之向下,点击右边加号,添加 Allow Arbitrary Loads (Xcode 7.0之后会默认填充Allow Arbitrary Loads ) 

3. 将value 改为YSE

-- -- 代码实现 -- --

 

#import "ViewController.h"

//NSURLSessionDataDelegate NSURLSession 获取网络数据的代理协议
@interface ViewController ()<NSURLSessionDataDelegate>
//保存结果的data
@property (nonatomic, strong) NSMutableData *resultData;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)post:(id)sender {
    
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];
    
    NSURLSessionTask *dataTask = [session dataTaskWithRequest:request];
    
    [dataTask resume];
    
//    NSURLSession *session = [NSURLSession sharedSession];
//    
//    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
//    NSURL *url = [NSURL URLWithString:urlString];
//    
//    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//    
//    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
//    [request setHTTPBody:postData];
//    [request setHTTPMethod:@"POST"];
//    
//    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//        if (error == nil) {
//            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            NSLog(@"dic == %@", dic);
//        }
//    }];
//    [task resume];
}
- (IBAction)get:(id)sender {
//    //block 回调的方式
//    //使用系统提供的全局的NSURLSession对象, 是一个单例
//    NSURLSession *session = [NSURLSession sharedSession];
//    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//    NSURL *url = [NSURL URLWithString:urlString];
//    //NSURLSession 是基于任务的, 所以所有的东西都要放到任务里面, NSURLSessionTask就是NSURLSession 的任务执行对象
//    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//        if (error == nil) {
//            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            NSLog(@"dic == %@", dic);
//        }
//    }];
//    //NSURLSession的所有任务默认是挂起的, 所以一定要调用resume方法, 让任务开始
//    [task resume];
    
    //NSURLSession 代理的异步操作
    
    //NSURLSession 代理人的属性是只读的
    // 参数一 : 会话模式
    // 参数二 : 代理人
    // 参数三 : 代理方法在哪个线程中进行
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
    
    //NSURLSessionTask的子类
    NSURLSessionTask *dataTask = [session dataTaskWithURL:url];
    
    [dataTask resume];
    
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    //NSURLSession的代理协议里面 必须设置允许继续请求, 才会继续的响应服务器, 获取到数据
    completionHandler(NSURLSessionResponseAllow);
    self.resultData = [NSMutableData data];
}

//接收到数据
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    [self.resultData appendData:data];
}

//结束响应
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    if (error == nil) {
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"dic == %@", dic);
    }
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

posted @ 2016-04-07 20:12  二十几岁的某一天  阅读(155)  评论(0编辑  收藏  举报