2015-10-12 21 views
9

HTTP POST要求でCookieを設定したいとします。Swift 2.0、Alamofire:HTTP POSTリクエストでCookieを設定する

以下のHTTPリクエストでクッキーのフィールドのようなもの、

version: 0.1.7 
Cookie: client=Android; version=0.1.7; sellerId=SEL5483318784; key=178a0506-0639-4659-9495-67e5dffa42de 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Content-Length: 1431 

どのように私はAlamofireでこれを達成することができますか?

私の現在のAlamofire要求はこのようなものです、

Alamofire.request(.POST, ServerConfig.ADD_PRODUCT_URL, parameters: productJSON, encoding: .JSON, headers: nil) 
    .responseJSON(completionHandler: { responseRequest, responseResponse, responseResult in 
     print(responseRequest!.URL) 
     print(responseResponse) 
     print(responseResult) 
    }) 

答えて

17

は私がプロジェクトで同じ問題を抱えていたし、私はそれを解決するために、このような何かを:

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.allHeaderFields as! [String: String], forURL: response.URL!) 
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: response.URL!, mainDocumentURL: nil) 

あなただけのこれをしなければなりませんAlamofireインスタンスがシングルトンであるため、次回のリクエストではクッキーが設定されます。

は、私がすることができた、それはあなたがジェレミーに:)

1

おかげで探しているものだホープ:

Alamofire.request(.POST, url, ...) 
    .responseJSON { 
    response in 
    HTTPClient.updateCookies(response) 
    ... 
} 

static func updateCookies(response: Response<AnyObject, NSError>) { 
    if let 
     headerFields = response.response?.allHeaderFields as? [String: String], 
     URL = response.request?.URL { 
     let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL) 
     //print(cookies) 
     // Set the cookies back in our shared instance. They'll be sent back with each subsequent request. 
     Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil) 
    } 
} 

あなたは可能性が非常に高い。このリクエストに拡張させることができ、そう.storeCookies()呼び出しは.validate()。responseJSON()チェーニングの一部となります。

2

スウィフト3:

私は私のUserDefaultsに保存されたクッキーの配列を持っていた私は、要求にそれらを接続するためにやったことだった。

var request = URLRequest(url: "https://yourURL.com") 
if let cookies = cookies as? [HTTPCookie] { 
    let headers = HTTPCookie.requestHeaderFields(with: cookies) 
    request.allHTTPHeaderFields = headers 
} 
関連する問題