亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS開發筆記4:HTTP網絡通信及網絡編程

2019-11-14 18:55:53
字體:
來源:轉載
供稿:網友

    這一篇主要總結iOS開發中進行HTTP通信及數據上傳下載用到的方法。網絡編程中常用的有第三方類庫AFNetworking或者iOS7開始新推出的NSURLsession,還有NSURLSession的前任NSURLConnection。一般情況下,使用AFNetworking即可滿足絕大多數要求,并且更簡潔高效。

    1.HTTP協議之POST與GET

    訪問網絡數據大部分都要用到HTTP協議,通過HTTP協議向服務器請求數據,再通過HTTP協議獲得服務器的響應數據,常見的操作主要是POST與GET,這兩個操作可以滿足絕大部分的應用需求了。

    GET操作主要使用場景是請求網絡資源,例如在瀏覽器中訪問網頁就發起了很多GET請求,GET請求的缺點在于安全性不夠,參數都在URL中了,并且不同的瀏覽器對URL長度有不同長度的限制,一些復雜的請求就不適用了。這時候需要用POST請求,POST請求的所有參數都放在請求體中,安全性更好,并且理論上沒有數據量的限制,文件上傳、賬號登陸等都用POST請求。 一般GET請求只適合于簡單的查詢請求,增刪改一般都用POST請求。

    2.HTTP請求中的一些參數

    (1)請求行,包含請求方法、請求路徑、HTTP協議版本信息

   

   (2)請求頭,包含訪問的服務器主機地址Host、緩存控制指令Cache-Control、客戶端類型User-Agent、客戶接收數據類型Accept、客戶端語言環境Accept-Language以及客戶端支持的數據壓縮格式Accept-Encoding等等

    (3)如果是POST請求,還有請求體信息

    3.HTTP響應中的一些參數

   (1)狀態行,包含了HTTP協議版本、狀態碼、狀態英文名稱

    (2)響應頭,包含服務器類型Server、返回數據類型Content-Type、返回數據長度Content-Length等等

    (3)實體內容,即服務器根據客戶端的請求返回的數據

    4.dataWithContentsOfURL

     這是最簡單的網絡請求,直接指定URL即可使用,但是請求的數據會放在手機內存當中,當下載的數據量較大時是不合理,并且不適用于HTTPS請求,參見之前博客“斯坦福iOS7公開課11筆記及演示Demo&訪問HTTPS鏈接下載數據”

    5.NSURLConnection

    發起請求有多種方式,也可以設置好請求參數,暫時不發出請求,在某一個地方再觸發請求,如圖所示

    這里我們選用“- connectWithRequest:delegate:”發起一個異步請求,并設置好代理,方便后續代理事件中對響應事件進行處理

    在代理方法中對數據進行處理,下載的數據名稱從響應信息里獲取“response.suggestedFilename”,與服務器端保持一致,需要注意的是,這里是在cache文件夾創建了一個文件,然后不斷寫入接收到數據,而不是使用NSMutableData,這是因為使用NSMutableData,接收到數據會存放在內存中,如果數據量較大會嚴重影響性能。所以一般不使用NSMutableData這種方式。

      更復雜的情況還有斷點續傳,對此,首先我們可以從服務器響應信息中獲取數據的總長度response.expectedContentLength,并在每次接收數據時更新已接受數據的長度值,將二者的數據存儲到沙盒中,中斷后重新下載時,根據當前已下載數據的長度值,設置HTTP請求頭的中“Range”,按照目前進度繼續下載即可。

    6.NSURLSession 

      NSURLSession是iOS7開始新推出的網絡基礎架構,用來代替NSURLConnection,主要有三個重要的子類:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask,分別用來獲取數據、上傳文件以及下載文件。并且使用NSURLSession還可以在后臺執行上傳下載任務,以及NSURLSessionConfiguration的眾多設置選項,對于iOS網絡編程來說完全足以替代甚至超越NSURLConnection。

     (1)NSURLSessionDataTask

      根據URL,使用dataTask獲取數據

 

   對于POST請求,還可以構造一個NSMutableURLRequest,對請求體進行設置,調用session的“dataTaskWithRequest”方法即可。

 (2)NSURLSessionDownloadTask

   需要注意的是下載文件默認是存放到臨時文件夾temp里的,下載完成后需要將其移動到目標位置。

   執行下載任務可以直接發起請求下載:

 

   也可以在delegate事件中進行處理:

 

     NSURLSession實現斷點下載更為容易,主要是通過“cancelByPRoducingResumeData”方法的回調事件拿到"resumeData",恢復下載時根據"resumeData"繼續下載“

downloadTaskWithResumeData”即可。

  (3)NSURLSessionUploadTask

    使用NSURLSessionUploadTask來執行上傳任務更為簡便,不像NSURLConnection還需要在請求體設置許多參數,一個 request加上要上傳的 NSData 對象或者是本地文件路徑對應的 NSURL即可。

    7.AFNetworking

   iOS開發中可能更常用的AFNetWorking,使得網絡編程更簡潔使用。

   下載地址:https://github.com/AFNetworking/AFNetworking

   下圖為常見的兩個使用示例:

    需要注意的是:

   (1)AFNetworking默認是把返回數據當做JSON來解析的,如果返回數據是xml或者要求對響應數據不進行解析操作,直接返回NSData,需要分別設置解析類型為“AFXMLParserResponseSerializer”、“AFHTTPResponseSerializer”。

    (2)實際情況中,返回數據的Content-Type可能不在AFNetworking支持的類型中,需要在“AFURLResponseSerialization.m”中添加對應類型

 

    同時AFNetworking對NSURLSession也進行了封裝,所以NSURLSession能做的事情,AFNetworking也能做,并且寫法更為簡便。

    8.網絡狀態監控

    監控網絡狀態有兩種辦法

  (1)使用蘋果提供的“Reachability”(非arc,需要注意設置編譯參數):

  (2)使用AFNetworking提供的方法:

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av电影免费观看高清| 国产成人精品久久| 中文精品99久久国产香蕉| 国产精品视频播放| 国产精品一区二区三区久久久| 国产在线播放91| 亚洲免费电影在线观看| 国产精品男人爽免费视频1| 欧美精品在线免费播放| 2019中文字幕免费视频| 国产视频亚洲精品| 成人激情综合网| 国产精品久久久久久久久免费看| 日韩av在线不卡| 97精品久久久中文字幕免费| 亚洲成人久久网| 国产精品久久99久久| 中文字幕一区二区三区电影| 欧美精品成人在线| 美日韩精品免费观看视频| 日韩av中文字幕在线播放| 中文字幕日韩在线观看| 国产视频久久久| 日日狠狠久久偷偷四色综合免费| 欧美片一区二区三区| 亚洲精品视频免费| 91精品久久久久久久久中文字幕| 国产精品自拍视频| 亚洲一区二区免费| 欧美性猛交xxxx免费看漫画| 亚洲国产精品专区久久| 成人午夜小视频| 亚洲伊人成综合成人网| 伊人一区二区三区久久精品| 亚洲美女性生活视频| 88xx成人精品| 深夜福利91大全| 2019国产精品自在线拍国产不卡| 亚洲肉体裸体xxxx137| 综合136福利视频在线| 亚洲午夜久久久久久久| 午夜精品一区二区三区av| 欧美又大又硬又粗bbbbb| 亚洲欧美国产精品va在线观看| 日韩精品中文字幕久久臀| 日韩av在线高清| 91禁国产网站| 亚洲一区二区中文字幕| 日韩不卡在线观看| 亚洲深夜福利网站| 国产成人97精品免费看片| 2019中文在线观看| 在线看日韩av| 热久久这里只有精品| 91美女福利视频高清| 亚洲欧美国产制服动漫| 欧美日韩亚洲视频一区| 成人黄色片网站| 亚洲福利在线看| 在线观看日韩www视频免费| 777国产偷窥盗摄精品视频| 韩日精品中文字幕| 亚洲r级在线观看| 精品国产一区久久久| 亚洲国产精久久久久久久| 国产91精品最新在线播放| 国产精品久久视频| 精品国产自在精品国产浪潮| 91成人免费观看网站| 疯狂做受xxxx高潮欧美日本| 欧美另类第一页| 日本免费一区二区三区视频观看| 国产日本欧美一区二区三区| 欧美精品免费在线| 亚洲国产成人久久综合| 久久久av网站| 久久99热精品这里久久精品| 97久久精品在线| 色哟哟网站入口亚洲精品| 欧美电影免费观看高清| 国产精品综合久久久| 欧美激情在线播放| 亚洲欧美制服中文字幕| 国产精品欧美风情| 亚洲三级 欧美三级| 国产精品91久久| 亚洲日本成人女熟在线观看| 亚洲激情在线观看| 三级精品视频久久久久| 亚洲第一精品电影| 国产精品视频一区二区高潮| 亚洲精品丝袜日韩| 国产精品网站入口| 在线看日韩av| 亚洲精品中文字| 欧美激情视频网| 成人久久一区二区| 国产丝袜一区二区三区免费视频| 77777亚洲午夜久久多人| 成人国内精品久久久久一区| 日韩电影中文字幕| 亚洲а∨天堂久久精品9966| 色狠狠av一区二区三区香蕉蜜桃| 久久综合久中文字幕青草| 欧美精品在线网站| 欧洲成人午夜免费大片| 亚洲黄色av女优在线观看| 精品久久香蕉国产线看观看gif| 色婷婷成人综合| 欧美孕妇孕交黑巨大网站| 欧美午夜激情视频| 亚洲国产精品久久久久久| 97成人精品区在线播放| 在线成人激情黄色| 人妖精品videosex性欧美| 精品偷拍一区二区三区在线看| 欧美多人爱爱视频网站| 亚洲国产精品va在线观看黑人| 午夜精品久久久久久久99黑人| 久久成人人人人精品欧| 亚洲欧美精品中文字幕在线| 国产精品直播网红| 日韩av在线最新| 亚洲一区第一页| 色偷偷综合社区| 国产精品一区二区电影| 亚洲片在线资源| 久久69精品久久久久久久电影好| 91av视频在线| 51精品在线观看| 欧美久久精品午夜青青大伊人| 18性欧美xxxⅹ性满足| 国产一区二区三区欧美| 日韩成人在线网站| 国产视频精品xxxx| 国产精品久久久久久av福利| 国产成人综合久久| 亚洲综合在线做性| 欧美乱人伦中文字幕在线| 亚洲一区中文字幕在线观看| 日韩免费av片在线观看| 伊人久久精品视频| 精品美女久久久久久免费| 国产精品视频26uuu| 国产偷亚洲偷欧美偷精品| 日本国产精品视频| 最近中文字幕mv在线一区二区三区四区| 欧美巨大黑人极品精男| 国产亚洲精品久久| 中文字幕在线看视频国产欧美| 成人网欧美在线视频| 日韩欧美高清视频| 国产小视频91| 日韩有码片在线观看| 91精品国产高清久久久久久久久| 日韩av片永久免费网站| 久久亚洲综合国产精品99麻豆精品福利| 日av在线播放中文不卡| 日韩精品福利网站| 亚洲热线99精品视频| 国产欧美欧洲在线观看| 日韩av不卡在线| 久久亚洲欧美日韩精品专区| 中文字幕国产精品久久|