• NSURLSession和NSURLConnection


    iOS9.0之后NSURLConnection被注销,采用NSURLSession,先介绍NSURLSession,然后介绍NSURLConnection

    1.NSURLSession:

    post请求:

        //1.
            NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
            request.HTTPMethod=@"POST";
            
            request.HTTPBody = [@"" dataUsingEncoding:NSUTF8StringEncoding];
        
        //2.
            NSURLSession *session=[NSURLSession sharedSession];
            
            NSURLSessionDataTask *dataTask=  [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                
                NSLog(@"NSURLSession加载数据。。。。post。。。。。%@",data);
                
                 }];
        //3.
            [dataTask resume];

    创建请求并设置代理delegate:(NSURLSessionDataDelegate)

        //1.确定请求路径
             NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
           
        //2.创建请求对象
             //请求对象内部默认已经包含了请求头和请求方法(GET)
             NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        //3.获得会话对象,并设置代理
            /*
                      第一个参数:会话对象的配置信息defaultSessionConfiguration 表示默认配置
                      第二个参数:谁成为代理,此处为控制器本身即self
                      第三个参数:队列,该队列决定代理方法在哪个线程中调用,可以传主队列|非主队列
                      [NSOperationQueue mainQueue]   主队列:   代理方法在主线程中调用
                      [[NSOperationQueue alloc]init] 非主队列: 代理方法在子线程中调用           
             */
             NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        
        //4.根据会话对象创建一个Task(发送请求)
             NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
        
        //5.执行任务
            [dataTask resume];

    delegate协议方法:

     //1.接收到服务器响应的时候调用该方法
    -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{
        //在该方法中可以得到响应头信息,即response
             NSLog(@"didReceiveResponse--%@",[NSThread currentThread]);
    
        completionHandler(NSURLSessionResponseAllow);
        
        //注意:需要使用completionHandler回调告诉系统应该如何处理服务器返回的数据
        
        //默认是取消的
             /*
                    NSURLSessionResponseCancel = 0,        默认的处理方式,取消
                    NSURLSessionResponseAllow = 1,         接收服务器返回的数据
                    NSURLSessionResponseBecomeDownload = 2,变成一个下载请求
                    NSURLSessionResponseBecomeStream        变成一个流
              */
    }
     //2.接收到服务器返回数据的时候会调用该方法,如果数据较大那么该方法可能会调用多次
    -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{
        NSLog(@"didReceiveData--%@",[NSThread currentThread]);
        
             //拼接服务器返回的数据
            
    }
    //3.当请求完成(成功|失败)的时候会调用该方法,如果请求失败,则error有值
     -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
             NSLog(@"didCompleteWithError--%@",[NSThread currentThread]);
        
             if(error == nil)
                 {
                         //解析数据,JSON解析请参考
                     
                     }
        
     }

     2.NSURLConnection

    普通请求:

     /*    //1.网址
         NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
         //2.请求
         NSURLRequest *request=[NSURLRequest requestWithURL:url];
         //3.队列
         NSOperationQueue *queue=[[NSOperationQueue alloc]init];
         //4.发送异步请求
         [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * response, NSData *  data, NSError *  connectionError) {
         NSString *content=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
         NSLog(@"加载成功:%@",content);
         }];
         */
        //同步发送,要放到另一个线程里,防止阻塞;
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            
            NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
            NSURLResponse *response;
            
            NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];//&指的是指针;
            NSString *content=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"NSURLConnection加载数据。。。。。。。:%@",content);
      });
        

    代理请求:(NSURLConnectionDataDelegate)

     NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
       // NSURLResponse *response;
       
        [NSURLConnection connectionWithRequest:request delegate:self];

    代理协议方法:

    //
    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
        NSLog(@"接到response");
    }
    //
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"接收数据"); }
    //
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"接收数据完成"); }

     参考网址:http://www.cnblogs.com/wendingding/p/5168772.html

  • 相关阅读:
    Centos 6.8安装配置KVM
    使用明小子进行网页渗透测试-XYCMS企业建站系统2.3(鑫跃教育)
    VSFTP2.3.4(笑脸漏洞)渗透测试
    MS08_067smb漏洞利用渗透测试
    css基本概念与css核心语法介绍
    HTML块级、行级元素,特殊字符,嵌套规则
    网页DIV+CSS布局与ifame传统布局对比
    html基本标签表单实现交互原理,单选框,复选框,下拉框介绍
    HTML基础标签图片文本超链接列表表格介绍
    html网页基本结构
  • 原文地址:https://www.cnblogs.com/sunjianfei/p/5570578.html
Copyright © 2020-2023  润新知