一個http請求中,咱們常常會涉及到Get請求的URL Param,POST請求的HTTP Body,Response Json,這些都是一個標準REST API標配的元素。 html
在一些安全驗證的API中,一般會涉及到Cookie。當用戶成功登錄後,服務器會在Response Header中寫入一個Set-Cookie字段,用來標識用戶已經登錄(受權)成功,客戶端瀏覽器接收後會把這個Cookie字段保存在客戶端本地。當客戶端再次請求API時,就會在Request Header中帶上這個Cookie值,告訴服務器:嗨,我已經受權過咯,個人cookie值是xxx,我如今要讀取一些信息,請放行~ ios
一個完整的網絡請求,須要先肯定Request URL,帶上參數,而後發送Request,而後接收Response,處理Response Data。 瀏覽器
在IOS中,分別對應以下: 安全
//Request URL NSURL //一個完整的Request對象 NSURLRequest //發送請求鏈接的主要操做者 NSURLConnection //包含返回數據的Response NSURLResponse
下面是一個簡單的GET請求代碼: 服務器
let request = NSURLRequest(URL: NSURL(string: "http://devonios.com")!) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response, nsData, error) -> Void in //處理返回數據nsData }
Paw是一個OS X系統下很是棒的測試HTTP REST API的程序。咱們用它來看看一個Request和Response中的Cookie是如何表現的。 cookie
Response中的Cookie: 網絡
Paw程序也是很是的智能的,當一個Response中包含了Cookie,會自動保存到默認的Cookie Jar中。 iphone
能夠在這裏看到Paw保存的Cookie: 測試
保存的Cookie數據: spa
Cookie已經保存下來了,那麼當咱們再次發送一個Request時,就會自動帶上Cookie:
你可能會發現,在NSURLRequest和NSURLResponse中並無Cookie相關的方法或者屬性。
不用納悶。由於IOS爲咱們設計了一個獨立的專門用來管理Cookie數據的類:NSHTTPCookieStorage,其中一個Cookie數據對應一個NSHTTPCookie類。
NSHTTPCookie是對一個Cookie數據的封裝,以便咱們讀取Cookie內容。
其實默認狀況下,咱們能夠不用管Cookie的,若是Response中帶有Cookie,IOS會自動調用NSHTTPCookieStorage,把Cookie數據保存下來。當有新的請求時,NSURLRequest會自動帶上相應的Cookie數據。
可是,重點來了,我想讀取下Cookie呢,我想判斷下Cookie值呢?我該如何手動在Request中插入一個Cookie呢?
IOS安全因素,不一樣APP之間是沒法共享Cookie的。
首先咱們要先獲取存放Cookie數據的Storage:
public class func GetCookieStorage()->NSHTTPCookieStorage{ return NSHTTPCookieStorage.sharedHTTPCookieStorage() }
有了Storage獲取Cookie就很簡單了:
public class func GetCookieArray()->[NSHTTPCookie]{ let cookieStorage = GetCookieStorage() let cookieArray = cookieStorage.cookies if let arr = cookieArray{ return cookieArray as! [NSHTTPCookie] } else{ return [] } }
在這個func中,咱們經過使用NSHTTPCookieStorage的cookie對象來獲取全部Cookie,類型是一個包含NSHTTPCookie的Array。
暫停下,NSHTTPCookie是什麼鬼?它有哪些屬性和方法,我讀Cookie值該怎麼寫?別懼怕,這時該是咱們的Dash大神上場啦!
打開咱們的Dash,在左上角輸入NSHTTPCookie,接着就是這樣了:
徹底沒有難度:
/// 獲取Cookie值 public class func GetCookieByName(let cookieName:String)->String? { let cookieArray:[NSHTTPCookie] = GetCookieArray() var value:String? if cookieArray.count > 0 { for cookie in cookieArray { if cookie.name == cookieName { value = cookie.value break } } } return value }這個func中,咱們經過傳一個cookie名稱,即可以拿到對應的值。
關於IOS中怎麼讀cookie就這樣結束啦,很是的簡單把。
http://stackoverflow.com/questions/2053568/managing-http-cookies-on-iphone
tips:
本文由wp2osc導入,原文連接:http://devonios.com/get-cookie.html
因爲OSChina的OpenAPI在處理content參數時會自動過濾img標籤,因此沒法顯示圖片,詳見。