1、概述瀏覽器
n NSURLSession是iOS7中新的網絡接口,與NSURLConnection是並列的。緩存
n 當程序在前臺時,NSURLSession與NSURLConnection大部分能夠互相替代安全
n NSURLSession支持後臺網絡操做,除非用戶強行關閉服務器
n NSURLSession提供的功能:cookie
p 經過URL將數據下載到內存網絡
p 經過URL將數據下載到文件系統session
p 將數據上傳到指定URL異步
p 在後臺完成上述功能性能
p 對於小型數據,例如用戶登陸、下載小圖像、JSON & XML仍然使用NSURLConnection的異步或同步方法便可測試
2、NSURLSession的使用
n 使用NSURLSessionConfiguration來配置NSURLSession對象
n 用NSURLSession對象來啓動一個NSURLSessionTask對象
n 也可使用系統全局的sharedSession單例來知足大多數的需求
n 注:相比較NSURLConnection的返回處理,NSURLSession提供了靈活的數據返回方式,可使用簡單的block方式來處理返回數據,也可使用更強大的delegate
3、NSURLSessionConfiguration
n 做用:用於定義和配置NSURLSession對象
n 每個NSURLSession對象均可以設置不一樣的NSURLSessionConfiguration,從而知足應用內不一樣類型的網絡請求
n NSURLSessionConfiguration的三種類型:
(1) defaultSessionConfiguration默認session配置,相似NSURLConnection的標準配置,使用硬盤來存儲緩存數據
(2) ephemeralSessionConfiguration臨時session配置,與默認配置相比,這個配置不會將緩存、cookie等存在本地,只會存在內存裏,因此當程序退出時,全部的數據都會消失
(3) backgroundSessionConfiguration後臺session配置,與默認配置相似,不一樣的是會在後臺開啓另外一個線程來處理網絡數據
4、NSURLSessionTask
n NSURLSession使用NSURLSessionTask來具體執行網絡請求的任務
n NSURLSessionTask支持網絡請求的取消、暫停和恢復,好比下載文件暫停以後再恢復就可以自動從上次的進度繼續下載
n NSURLSessionTask還能獲取數據的讀取進度
n NSURLSessionTask的三種類型:
(1) NSURLSessionDataTask 處理通常的NSData數據對象,好比經過GET或POST方式從服務器獲取JSON或XML返回等等,但不支持後臺獲取
(2) NSURLSessionUploadTask 用於上傳文件,支持後臺上傳
(3) NSURLSessionDownloadTask 用於下載文件,支持後臺下載
例如:
#pragma mark - 用Session上傳頭像
- (void)uploadFile
{
// 1. NSURL
NSString *urlString = @"http://localhost/uploads/測試一下.png";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
// NSURL *url = [NSURL URLWithString:@"http://localhost/uploads/測試一下.png"];
// 2. Request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0];
request.HTTPMethod = @"PUT";
// 設置用戶受權
// 1> "admin:123456"
NSString *authStr = @"admin:123456";
// 2> result = 對字符串進行BASE64編碼(網絡傳輸中經常使用的一種編碼格式,NSData)
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *result = [authData base64EncodedStringWithOptions:0];
// 3> "Basic result" => 提交給服務器的驗證字符串,用來驗證身份
NSString *authString = [NSString stringWithFormat:@"Basic %@", result];
// 設置HTTP請求頭的數值,設置用戶受權
[request setValue:authString forHTTPHeaderField:@"Authorization"];
// 3. Session,有一個單例,是全局共享的
NSURLSession *session = [NSURLSession sharedSession];
// 4. 文件上傳
NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"頭像1.png" withExtension:nil];
// 全部任務默認都是掛起的
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromFile:bundleURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// 上傳完成操做
NSLog(@"%@", response);
}];
[task resume];
}
5、經過HTTP PUT方法實現文件上傳的步驟
n 實例化NSMutableURLRequest並指定HTTPMethod爲PUT
n 設置請求的受權
(1) 受權字符串格式:用戶名:口令
(2) 受權模式:Basic base64編碼的受權字符串
(3) 爲HTTPHeaderField的Authorization賦值
6、文件上傳的請求部分
// 1. URLRequest
NSURL *url = [NSURL URLWithString:@"http://localhost/uploads/xxx.png"];
NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
requestM.HTTPMethod = @"PUT";
// 設置用戶受權
// 1> 受權字符串(用戶名+密碼)
NSString *authStr = @"admin:123456";
// 2> BASE 64編碼
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64Str = [authData base64EncodedStringWithOptions:0];
NSString *auth = [NSString stringWithFormat:@"BASIC %@", base64Str];
[requestM setValue:auth forHTTPHeaderField:@"Authorization"];
75、HTTP的常見方法
n GET 獲取指定資源
n POST 2M 向指定資源提交數據進行處理請求,在RESTful風格中用於新增資源
n HEAD 獲取指定資源頭部信息
n PUT 替換指定資源(不支持瀏覽器操做)
n DELETE 刪除指定資源
n OPTIONS 容許客戶端查看服務器的性能
n TRACE 回顯服務器收到的請求,主要用於測試或診斷
n CONNECT 預留給可以將鏈接改成管道方式的代理服務器(HTTP代理使用)
n 提示: