網路請求相關小結2,請求相關小結
1 NSURLConnettion
NSURLConnettion是 Core Foundation/CFNetwork架構 API 之上的一個抽象. NSURLConnettion是用來指代 Foundation 架構中的一系列組件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名類 NSURLConnection.
注1:原來的使用原理:一個 NSURLRequest 發送給 NSURLConnect.被委派物件(遵守 NSURLConnectionDeledate 和 NSURLConnectionDataDeledate 非正式協議)非同步返回一個 NSURLResponce 和伺服器的 NSData.
注2:在一個請求發送給伺服器的時候,系統會先查詢快取資訊,然後根據策略和可用寫的不同,當在緩衝中找到響應則直接返回.否則,系統將根據我們的策略,將接到請求後的響應緩衝到並返回.
注3:在把請求發送給伺服器的時候,伺服器會發出鑒權查詢,這可以有共用的 cookie 或者機密儲存來自動響應,或者由被委託的對象來響應.發送中的請求,也可以被 NSURLProtocol 攔截,以便在必要的時候,無縫的改變其請求.
NSURLConnettion是使用步驟:
1 擷取一個 URL
2 通過 URL 建立一個請求
3 用NSURLConnettion發送請求
2 NSURLSession
和 NSURLConnection 一樣, NSURLSession 不僅僅包括同名的 NSURLSession, 還包括NSURLRequest 和 NSURLCache. 同時將NSURLConnection 對應為NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三個子類,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.
和 NSURLConnection 相比, NSURLSession 最大的改變可以配置每一個緩衝的session 緩衝, cookie 值,協議以及憑證原則甚至誇程式共用這些資訊.這保證了程式和網路架構之間的相互獨立.每一個 NSURLSession 有一個 NSURLSessionConfiguration 來進行初始化, NSURLSessionConfiguration指定了策略,以及在行動裝置上增強效能的選項.
NSURLSession 的另一個特點就是 session Task, 用來處理的上傳和下載.和 NSURLConnection 最大的不同之處在於,所有的 task 共用其創造者 NSURLSession.
注: NSURLSessionTask分析
NSURLSessionTask 是一個抽象類別,裡麵包含NSURLSessionDataTask , NSURLSessionDownLoadTask 以及 NSURLSessionUpLoadTask三個子類.這三個子類封裝了網路的基本任務:擷取資料,上傳和下載
使用原理:當一個 NSURLSessionDataTask 完成的時候,會有一個返回的資料,一個 NSURLSessionDownLoadTask 完成的時候會帶一個臨時檔案的路徑.檔案上傳的時候也會返回一定的資料,所以可以說 NSURLSessionUpLoadTask 是繼承於 NSURLSessionDataTask.所有的 Task 都可以取消,暫停和恢複,當暫停時候回記錄當前的位置,以便下載繼續從此點繼續下載.需要說明的是 NSURLSessionTask 是有 NSURLSession 建立的.
NSURLSession的使用步驟:和 NSURLConnection 基本相似,然後使用resume方法來講它運行.
1 擷取一個 URL
2 通過 URL 建立一個請求
2.1 建立一個上傳的NSData(UpLoad 上傳的時候用)
3 建立一個NSURLSession的單例
4 通過NSURLSession發送請求(注:使用 resume)
執行個體:
1 DataTask
NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[task resume];
2 UpLoadTask
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSData *data = ...;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
fromData:data
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[uploadTask resume];
3 DownLoadTask
注: Download task 也需要一個 request,不同之處在於 completionHandler 這個 block。Data task 和 upload task 會在任務完成時一次性返回,但是 Download task 是將資料一點點地寫入本地的臨時檔案。所以在 completionHandler 這個 block 裡,我們需要把檔案從一個臨時地址移動到一個永久的地址儲存起來.
NSURL *URL = [NSURL URLWithString:@"http://example.com/file.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request
completionHandler:
^(NSURL *location, NSURLResponse *response, NSError *error) {
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];
NSURL *newFileLocation = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]];
[[NSFileManager defaultManager] copyItemAtURL:location toURL:newFileLocation error:nil];
}];
[downloadTask resume];
3 NSURLSession 和 NSURLConnection 的區別
NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用來處理串連層的問題(伺服器的信任,用戶端認證的評估等),Task 的代理方法用來處理鑒權查詢和以網路請求有關的問題.
4 AFN 架構
AFN 是對 NSURLConnection 的一層封裝
AFN 的主要功能:
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager(封裝了常用的 HTTP 方法)
AFHTTPRequestOperationManager的屬性
1 baseURL :開發人員針要對 AFHTTPRequestOperationManager 自訂一個單例子類,設定 baseURL, 所有的網路訪問,都只使用相對路徑即可.
2 requestSerializer :請求資料格式/預設是二進位的 HTTP
3 responseSerializer :響應的資料格式/預設是 JSON 格式
4 operationQueue
5 reachabilityManager :網路連接管理器
AFHTTPRequestOperationManager方法:
1 manager :方便建立管理器的類方法
2 HTTPRequestOperationWithRequest :在訪問伺服器時,如果要告訴伺服器一些附加資訊,都需要在 Request 中設定
3 GET
4 POST
AFURLSessionManager
AFHTTPSessionManager(封裝了常用的 HTTP 方法)
1 GET
2 POST
3 UIKit+AFNetWorking分類
4 NSProgress(利用 KVO)
AFURLRequestSerialization :請求的資料格式/預設是二進位的
AFURLResponseSerialization :響應的資料格式/預設是JSON格式
1 安全性原則:(HTTPS 和AFSecurityPolicy)
2 網路檢測: (對連結方式進行了封裝和 AFNetWorkingReachabiliManager)
使用連結: http://www.cnblogs.com/worldtraveler/p/4736643.html
AFN 的使用步驟:
1 建立一個請求操作管理者
2 聲明響應結果進行 JSON,XML等資料解析,返回 Data
3 佈建要求參數
4 發送請求
補充 ASI: (功能很強大,但是已經不更新了)
ASI 使用步驟:
1 擷取 URL
2 擷取 ASI 請求對象
3 發送請求