2015-10-12 14 views
9

मैं अपने HTTP पोस्ट अनुरोध में कुकीज़ सेट करना चाहता हूं।स्विफ्ट 2.0, अलामोफायर: HTTP पोस्ट अनुरोध में कुकीज़ सेट करें

नीचे 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) 

तुम बस यह करने के लिए है एक बार, क्योंकि अलामोफायर इंस्टेंस एक सिंगलटन है, इसलिए कुकी के सेट के अगले अनुरोध के लिए।

आशा है कि यह क्या आप जेरेमी के लिए :)

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()। प्रतिक्रिया जेएसओएन() चेनिंग का हिस्सा होगा।

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 
} 
संबंधित मुद्दे