簡介:因為在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請求代碼
代碼執行結果: