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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM