NSURLSession数据解析的get请求和post请求步骤

#pragma mark - get请求
- (IBAction)getRequest:(id)sender {
    
    // 方式一: 使用Block实现
    
//    // 1.创建URL
//    NSURL *url = [NSURL URLWithString:GET_URL];
//    
//    // 2.创建Session对象
//    NSURLSession *session = [NSURLSession sharedSession];
//    
//    // 3.创建task请求任务
//    // NSURLSession是基于任务去完成相关的事件
//    // NSURLSessionTask所有的任务均放在这个里边实现
//    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//        
//        // 4.解析相关的数据
//        if (error == nil) {
//            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            
//            NSLog(@"dict = %@", dict);
//        }
//
//    }];
//    
//    // 5.核心步骤:启动任务[千万不能忘记]
//    // 原因:NSURLSessionTask实例出来的任务处于挂起状态,如果不启动,不会走block中实现内容
//    [task resume];

// 方法二: 使用代理实现

// 1.创建URL    NSURL *url = [NSURL URLWithString:GET_URL];
    
    // 2.创建session
    // 参数1: 模式的设置

/**
     默认会话模式
     defaultSessionConfiguration
     //临时会话模式
     ephemeralSessionConfiguration
     // 后台会话模式
     backgroundSessionConfigurationWithIdentifier
     
     */
    // 参数2:代理
    //参数3: 主线程队列
    
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    
    // 3.创建pask
    NSURLSessionDataTask *task = [session dataTaskWithURL:url];
    
    // 4.启动任务
    [task resume];
    // 对数据进行加载: 使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
    // 要处理下载任务的使用此任务:NSURLSessionDownloadTask
    
    // 要处理上传任务使用: NSURLSessionUploadTask
    
}

#pragma mark - NSURLSessionDataDelegate协议的实现方法

// 服务器开始响应
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    //允许服务器响应[在这个地方只有允许服务器响应了才会接受到数据]
    completionHandler(NSURLSessionResponseAllow);
    
    // 初始胡data,稍后进行片段的拼接存储
    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 *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
        
        NSLog(@"dict = %@", dict);
    }
    
}

#pragma mark - post请求
- (IBAction)postRequest:(id)sender {
    
    //1.创建URL
    NSURL *url = [NSURL URLWithString:POST_URL];
    
    //2.创建请求
    NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url];
    //2.5 核心设置boby
    NSString *bobyString = POST_BODY;
    
    NSData *postData = [bobyString dataUsingEncoding:NSUTF8StringEncoding];
    [mutableRequest setHTTPMethod:@"POST"];
    [mutableRequest setHTTPBody:postData];
    
    // 3.创建Session对象
    NSURLSession *session = [NSURLSession sharedSession];
    
    // 4.创建task
    NSURLSessionTask *task = [session dataTaskWithRequest:mutableRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
       //5.解析
        if (error == nil) {
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
            NSLog(@"dict = %@", dict);
        }
        
    }];
    
    //6.启动任务
    [task resume];
    
}

时间: 2024-10-14 10:25:54

NSURLSession数据解析的get请求和post请求步骤的相关文章

Ajax相关——get请求和post请求的区别

一.完整的URL由以下几部分组成: scheme:通信协议,常用的有:http/ftp. host:主机,服务器(计算机)域名或IP地址 port:端口,整数,可选,省略时使用默认端口,http的默认端口是80. path:路径,由零或多个"/"符号隔开的字符,一般用来表示主机的一个目录或者文件地址 query:查询,可选,用于给动态网页(如用CGI.ISAPI.PHP/ASP/JSP/ASP.NET等技术制作的网页)传递参数,用"&"符号隔开,每个参数的名

iOS开发网络篇—GET请求和POST请求

iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:u

GET请求和POST请求区别

GET请求和POST请求区别 1.GET被强制服务器支持 GET通常用于请求服务器发送某个资源.在HTTP/1.1中,要求服务器实现此方法;POST请求方法起初是用来向服务器输入数据的.在HTTP/1.1中,POST方法是可选被实现的,没有明确规定要求服务器实现. 2.浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据 RFC 2616 中明确对 uri 的长度并没有限制.不过虽然在RFC中并没有对uri的长度进行限制,但是各大浏览器厂家在实现的时候限制了URL的长度,可

iOS开发网络篇—GET请求和POST请求(转)

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

浏览器的get请求和post请求的区别

GET 请求和 POST 请求: 1). 使用GET方式传递参数: ①. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为              GET. 例如:  http://localhost:8080/20161106-JavaWeb-Servlet/index.html 或<a href="input.html"></a>②. 如果网页中的<form>表单元素的 method 属性明

iOS网络编程开发GET请求和POST请求

iOS网络编程开发GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; NSURL *url=[NSURL URLWithString:urlStr]

HTTP的GET请求和POST请求

1.HTTP请求概述 在前面有一篇文章对HTTP协议又详细的描述,这里就不再过多的做说明,值是简单的作为这篇文章的引子. HTTP协议又被称为超文本传输协议,他的的设计目的是保证客户机与服务器之间的通信.HTTP 的工作方式是客户机与服务器之间的请求-应答协议.在客户机和服务器之间进行请求-响应时,有两个最基本的请求方式:GET 和 POST. 其中,GET请求表示从指定的资源请求数据,POST请求表示向指定的资源提交要被处理的数据. 2.HTTP请求格式 在HTTP请求中,首先是请求行,注意这

Ajax中get请求和post请求

我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1.使用Get请求时,请求所带的参数会跟在URL后传递,而Post请求则是作为HTTP消息的实体内容发送给WEB服务器. 2.使用Get请求发送数据量小,通常不能大于2KB:而Post请求发送数据量大,理论上不受限制. 3.Get方式请求的数据会被浏览器缓存起来,可从浏览器的历史记录中读取到这些数据,

赵雅智_HttpClient的 get请求和post请求

DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少. 但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极. 在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端.它提供了对HTTP协议的