#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];
}