異步post請求之代理方法

  1 #import "ViewController.h"
  2 #import "Header.h"
  3 
  4 @interface ViewController ()<NSURLSessionDataDelegate>
  5 
  6 /**
  7  *  用於保存相關的數據
  8  */
  9 @property (nonatomic, strong) NSMutableData *resultData;
 10 
 11 @end
 12 
 13 @implementation ViewController
 14 
 15 - (void)viewDidLoad {
 16     [super viewDidLoad];
 17     // Do any additional setup after loading the view, typically from a nib.
 18 }
 19 
 20 // 對數據進行加載:使用NSURLSessionDataTask和NSURLSessionTask二者沒有本質區別
 21 // 要處理下載任務的使用使用此任務NSURLSessionDownloadTask
 22 // 要處理上傳任務使用:NSURLSessionUploadTask
 23 
 24 #pragma mark - post請求(異步)
 25 - (IBAction)postRequest:(UIButton *)sender {
 26 
 27     // 1.建立url
 28     NSURL *url = [NSURL URLWithString:GET_URL];
 29     
 30     // 2.建立請求
 31     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 32 
 33 
 34     // 2.5.設置body
 35     // 建立一個鏈接字符串(這個內容在之後的開發中接口文檔都有標註)
 36     NSString *dataStr = POST_BODY;
 37 
 38     // 對鏈接字符串進行編碼【這一步千萬不能忘記】
 39     NSData *postData = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
 40 
 41     // 設置請求格式爲post請求【在這裏POST必須大寫】
 42     [request setHTTPMethod:@"POST"];
 43 
 44     // 設置請求體(body)
 45     [request setHTTPBody:postData];
 46 
 47     // 3.建立session對象並設置代理
 48     // 參數一:模式的設置
 49     /*
 50      defaultSessionConfiguration 默認會話模式
 51      ephemeralSessionConfiguration 瞬時會話模式
 52      backgroundSessionConfigurationWithIdentifier 後臺會話模式
 53      */
 54     // 參數二:代理
 55     // 參數三:線程隊列
 56     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
 57     
 58     
 59     // 4.建立task對象
 60     NSURLSessionDataTask *task = [session dataTaskWithURL:url];
 61     
 62     
 63     // 5.啓動任務
 64     [task resume];
 65     
 66     // 對數據進行加載:使用NSURLSessionDataTask和NSURLSessionTask二者沒有本質區別
 67     // 要處理下載任務的使用使用此任務NSURLSessionDownloadTask
 68     // 要處理上傳任務使用:NSURLSessionUploadTask
 69 
 70 }
 71 
 72 #pragma mark - 實現協議方法
 73 // 服務器開始響應
 74 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
 75     
 76     // 容許服務器響應【在這個地方只有容許服務器響應了纔會接收到數據】
 77     completionHandler(NSURLSessionResponseAllow);
 78     
 79     // 初始化data,稍後進行片斷的拼接存儲
 80     self.resultData = [NSMutableData data];
 81 }
 82 
 83 // 接收數據拼接
 84 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
 85     
 86     // 反覆執行,而後拼接相關的片斷
 87     [self.resultData appendData:data];
 88 }
 89 
 90 // 數據接收完成,網絡請求結束
 91 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
 92     
 93     // 解析
 94     if (error == nil) {
 95         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
 96         NSLog(@"%@", dic);
 97     }
 98 }
 99 
100 @end
相關文章
相關標籤/搜索