GET/POST異步請求方法
字符串轉化成url字符串
NSString *strURL = [[NSString alloc] initWithFormat:@"http://www.51work6.com/service/mynotes/WebService.php?email=%@&type=%@&action=%@", @"test@51work6.com", @"JSON", @"query”];
strURL = [strURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
創建URL及request 請求URL
NSURL *url = [NSURL URLWithString:strURL];
get請求:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
post請求:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST”];
[request setHTTPBody:postData];
創建NSURLSessionConfiguration對象,分別配置每一個 session 對象。( NSURLConnection 很難做到 )
NSURLSessionConfiguration *defaultConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
分類:
1) defaultSessionConfiguration: 默認 session 配置,類似NSURLConnection 的標準配置,使用硬盤來存儲緩存數據。
2) backgroundSessionConfiguration: 后臺session配置,與默認配置類似,不同的是會在后臺開啟另一個線程來處理網絡數據。
注意: 這里如果設置了超時限制的話,可能會導致一直下載失敗。因為后臺下載會根據設備的負載程度決定分配下載的資源。
PS: 后臺處理,由系統統一決定,并且所有的需要后臺處理的都會被同時列隊,或者說同時進行,只要負載允許;
創建NSURLSession對象并添加到主隊列中
NSURLSession *session = [NSURLSession sessionWithConfiguration: defaultConfig delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
創建sessiontask 對象
Session Task分為三種Data Task,Upload Task,Download Task。
NSURLSessionDataTask *task = [session dataTaskWithRequest:<#(nonnull NSURLRequest *)#> completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"請求完成");
NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
}];
// 使用resume方法啟動任務
[task resume];