網路請求相關小結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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...