網路請求相關小結2,請求相關小結

來源:互聯網
上載者:User

網路請求相關小結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 的主要功能:

  • NSURLConnection

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

  • NSURLSession

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 發送請求

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.