网络编程 利用NSURLSession发送GET POST请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程 利用NSURLSession发送GET POST请求相关的知识,希望对你有一定的参考价值。

Xcode 7.0后,http链接不能直接访问(https可以),需要在Info.plist增加下面一项才能正确访问。

技术分享

 

 使用NSURLSession进行网络请求的流程:

     1.构造NSURL

     2.构造NSURLRequest请求对象

     3.构造NSURLSession会话对象

     4.创建网络请求任务:dataTask, downloadTask, uploadTask

     5.发送网络请求

 

1.GET 请求(GET一般用于获取/查询资源信息

- (void)HTTPGET
{
    //1.构造NSURL
    NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"];
    //2.构造NSURLRequest请求对象
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    //对请求对象进行设置
    request.URL = url;
    request.HTTPMethod = @"GET";
    //3.构造NSURLSession会话对象(单例)
    NSURLSession *session = [NSURLSession sharedSession];
    //4.创建dataTask网络请求任务(请求任务有3种dataTask, downloadTask, uploadTask)
    /*
     (1)completionHandler:是网络请求完成后会回调的block
     (2)response代表响应对象,可以由它获取当前响应的状态,响应头数据
     (3)data代表服务器传输的数据,即响应体的内容
     (4)error代表请求过程中出现错误,可以用它进行调试。
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
        //打印响应状态码,200表示请求成功,其他百度一下HTTP响应状态码对照看就可以了
        NSLog(@"响应状态码 = %ld",HTTPResponse.statusCode);
        
        //这里返回的是json数据,对响应数据进行json解析
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"接收到的数据:%@",result);
        
    }];
    
    //5.开始发送网络请求或者是继续之前挂起的网络请求任务
    [dataTask resume];
    
}

2.POST请求(POST一般用于更新资源信息,也有很多情况是获取指定信息,需要在请求体里添加相应内容)

- (void)HTTPPOST
{
    //1.构造NSURL
    NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/schedule.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"];
    //2.构造NSURLRequest请求对象
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    request.URL = url;
    request.HTTPMethod = @"POST";
    
    NSString *bodyString = @"cinema_id=1533";
    request.HTTPBody = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
    //3.构造NSURLSession会话对象(单例)
    NSURLSession *session = [NSURLSession sharedSession];
    //4.创建dataTask网络请求任务
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //打印响应状态码,200表示请求成功,其他百度一下HTTP响应状态码对照看就可以了
        NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
        NSLog(@"响应状态码 = %ld",HTTPResponse.statusCode);
        //获取响应体数据,进行JSON解析
        NSError *jsonError = nil;
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
        NSLog(@"%@", result);
    }];
    
    [task resume];
}

打印结果 

技术分享

 

以上是关于网络编程 利用NSURLSession发送GET POST请求的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

NSURLSession 发送 GET 请求,即使我在 HTTPMethod 中设置了 POST

iOS开发网络学习七:NSURLSession的基本使用get和post请求

NSURLSession的GET和POST请求的封装