簡介:因為在iOS9.0之後,以前使用的NSURLConnection過期,蘋果推薦使用NSURLSession來替換NSURLConnection完成網路請求相關操作。
所以在此介紹如何使用NSURLSession來發送GET請求和POST請求。
後續又將其封裝起來,方便以後可以通過一個方法實現所有過程!! http://www.linuxidc.com/Linux/2016-04/129798.htm
使用步驟:
1)確定請求路徑
2)創建請求對象(POST請求需要修改請求方法和設置請求體)
3)創建會話對象(NSURLSession)
4)根據會話對象創建請求任務(NSURLSessionDataTask)
5)執行Task
6)當得到服務器返回的響應後,解析數據
GET請求代碼:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { /* 登錄接口說明:http://127.0.0.1/login/login.php 是一個登陸接口,若傳入的參數正確 則返回{"userId":1,"userName":"zhangsan"}的JSON數據 */ //GET請求將參數拼接在 url 後面 //網絡接口 和 參數 以 ? 分隔. 參數和參數之間以 & 符號分隔.注意刪除最後一個 & 符號. //如:http://127.0.0.1/login.php?username=zhangsan&password=zhang // NSUrlSession 的使用步驟: // 1.實例化網絡會話. NSURLSession *session = [NSURLSession sharedSession]; // 2.根據網絡會話,實例化網絡任務. // 網絡任務: 三種: 普通/上傳/下載 // NSURLSessionDataTask :普通網絡任務. // 如果是GET 請求,可以直接根據 url 實例化網絡任務. NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php?username=zhangsan&password=zhang"]; /* 第一個參數:請求路徑:內部會自動將路徑包裝成請求對象 第二個參數:completionHandler回調(請求完成【成功|失敗】的回調) data:響應體信息(期望的數據) response:響應頭信息,主要是對服務器端的描述 error:錯誤信息,如果請求失敗,則error有值 */ NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 默認是子線程. NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); }]; // 3.開啟網絡任務. [task resume]; }GET請求代碼
POST請求代碼:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { /* 登錄接口說明:http://127.0.0.1/login/login.php 是一個登陸接口,若傳入的參數正確 則返回{"userId":1,"userName":"zhangsan"}的JSON數據 */ //注意:POST請求將參數添加在請求體中 // NSUrlSession 的使用步驟: // 1.實例化網絡會話. NSURLSession *session = [NSURLSession sharedSession]; // 2.根據網絡會話,實例化網絡任務. NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php"]; //3.創建可變請求對象 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //4.設置請求體 request.HTTPBody = [@"username=zhangsan&password=zhang" dataUsingEncoding:NSUTF8StringEncoding]; //5..設置請求方法: request.HTTPMethod = @"POST"; /* 第一個參數:請求對象 第二個參數:completionHandler回調(請求完成【成功|失敗】的回調) data:響應體信息(期望的數據) response:響應頭信息,主要是對服務器端的描述 error:錯誤信息,如果請求失敗,則error有值 */ NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 默認是子線程. NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); }]; // 3.開啟網絡任務. [task resume]; }POST請求代碼
代碼執行結果: