網路請求相關小結2

来源:http://www.cnblogs.com/xuan-yuan/archive/2016/05/26/5532201.html
-Advertisement-
Play Games

1 NSURLConnettion NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一個抽象. NSURLConnettion是用來指代 Foundation 框架中的一系列組件: NSURLRequest,NSURLResponse,NSUR ...


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從官網下載壓縮包,解壓,直接打開build目錄下的project 打開後, 相關的設置 fix直接修複或者下載 設置 設置每個插件目錄下的java目錄為source 編譯openfire和plugins插件 點擊蟲子 如果報下麵這個錯誤是包引用錯了 OK! lib目錄下麵的jar包,文件太大,lib ...
  • CentOS 7 下載地址:http://mirrors.opencas.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1511.iso 一、安裝系統 1、本次使用的是Vmware,將CentOS安裝在虛擬機里以下是虛擬機的配置,點擊完成 2、 ...
  • 環境: Sql Server2012 SP3企業版,Windows Server2008 標準版 問題由來: 最近在做DB優化的時候,發現一個存儲過程有非常嚴重的性能問題, 由於整個SP整體邏輯是一個多表關聯的複雜的查詢,整體結構比較複雜的,通過的分析和嘗試, 最後發現問題出在其中一個大表的查詢上實 ...
  • 獲取SQL執行計劃的常見幾種方法 一、獲取庫緩衝區中的執行計劃 1. 查詢v$sql動態性能視圖,找到要查詢的SQL語句的sql_id。 2. 調用dbms_xplan包的display_cursor方法,查看該語句執行時的執行計劃。 例如: SELECT dname FROM emp, dept ...
  • 利用PL/SQL可以進行模塊化程式設計。 在一個PL/SQL塊中,可以定義若幹個子程式。 把一些功能相對獨立、需要經常執行的代碼定義為一個子程式,在需要時根據子程式的名字進行調用。這樣不僅便於程式設計和編碼,而且利於程式的調試。PL/SQL有兩種形式的子程式,即過程和函數。 在子程式中也可以定義變數 ...
  • 談完並行執行的原理,咱們再來談談優化,到底並行執行能給我們帶來哪些好處,我們又應該註意什麼呢,下麵展開. Amdahl’s Law 再談並行優化前我想有必要談談阿姆達爾定律,可惜老爺子去年已經駕鶴先去了. 其中P:可以並行的百分比 N:演算法並行計算使用的”CPU” 這裡我們舉個簡單的例子,我們來做一 ...
  • 編寫PL/SQL塊的主要目的是對資料庫進行訪問,因此,在PL/SQL塊中可以包含SELECT語句、DML語句,還可以包含DCL語句。需要註意的是,在PL/SQL塊中不能直接包含DDL語句,如果要利用PL/SQL塊完成諸如創建表、修改表結構等操作,需要通過其他方法。通過SQL語句以及流控制語句,可以編 ...
  • 1.下載 mysql-mysql-5.1.55-win32.zip 2. 解壓縮到任何一個目錄,最好目錄名稱不要有空格; 例如:C:\mysql 3. 刪除Embedded,include,lib,mysql-test 這四個目錄。 註:這四個目錄占了300多M,刪除後,只有不到100M。 3,在c... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...