iOS_网络请求_NSURLSession_使用

2017-05-05  本文已影响0人  狍子扛枪

1.Tips:

发布版本 -> iOS7
支持HTTP 2.0
下载时直接将下载的文件存储到沙盒内的tmp文件夹(要保存的需要自行处理)
支持断点续传
支持后台下载/上传
多线程异步下载

2.使用步骤:

1.创建session对象

2.通过session创建task

3.启动task

4.根据所设置的block(delegate)处理请求返回

3.具体使用

( 1 )GET、POST请求

通过block处理请求返回

// 请求url
NSURL *url = [NSURL URLWithString:@"http://www.test.com/login"];

// 初始化request,在request中设置请求方式
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// POST请求
request.HTTPMethod = @"POST";

// GET请求
//request.HTTPMethod = @"GET";

request.HTTPBody = [@"username=Hohn&pwd=888" dataUsingEncoding:NSUTF8StringEncoding];

// 创建session对象
NSURLSession *session = [NSURLSession sharedSession];

// 创建task对象,并设置对请求的返回处理block
NSURLSessionTask *task = [session dataTaskWithRequest:request
                                    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                        //TODO 请求返回处理
                                }];
// 启动task
[task resume];

通过delegate处理请求返回

// 请求url
NSURL *url = [NSURL URLWithString:@"http://www.test.com/login"];

// 初始化request,在request中设置请求方式
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// POST请求
request.HTTPMethod = @"POST";

// GET请求
//request.HTTPMethod = @"GET";

request.HTTPBody = [@"username=Hohn&pwd=888" dataUsingEncoding:NSUTF8StringEncoding];

// 创建session对象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                                                      delegate:self
                                                 delegateQueue:[[NSOperationQueue alloc] init]];

// 创建task对象,并设置对请求的返回处理block
NSURLSessionTask *task = [session dataTaskWithRequest:request
                                    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                        //TODO 请求返回处理
                                }];

// 启动task
[task resume];


//对应的代理方法如下:

// 1.接收到服务器的响应
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    // 允许处理服务器的响应,才会继续接收服务器返回的数据
    completionHandler(NSURLSessionResponseAllow);
}

// 2.接收到服务器的数据(可能调用多次)
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    // 处理每次接收的数据
}

// 3.请求成功或者失败(如果失败,error有值)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    // 请求完成,成功或者失败的处理
}

通过delegate去处理请求可以更方便的控制各个阶段,从而实现断点续传等更丰富的功能,各种delegate

( 2 )GET、POST请求

上一篇下一篇

猜你喜欢

热点阅读