【问题标题】:Swift 2.0, Alamofire: Set cookies in HTTP Post RequestSwift 2.0,Alamofire:在 HTTP Post 请求中设置 cookie
【发布时间】:2016-01-10 01:22:17
【问题描述】:

我想在我的 HTTP POST 请求中设置 cookie。

类似于下面 HTTP 请求中的 cookie 字段,

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)
     })

【问题讨论】:

    标签: swift cookies swift2 nsurlrequest alamofire


    【解决方案1】:

    我在一个项目中遇到了同样的问题,我做了这样的事情来解决它:

    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 实例是一个单例,所以为所有下一个请求设置 cookie。

    希望它是您正在寻找的东西:)

    【讨论】:

      【解决方案2】:

      感谢 Jérémy,我能够:

      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)
          }
      }
      

      您很可能将此作为 Request 的扩展,因此 .storeCookies() 调用将成为 .validate().responseJSON() 链接的一部分。

      【讨论】:

        【解决方案3】:

        斯威夫特 3:

        我在我的 UserDefaults 中保存了一组 cookie,我将它们附加到请求中的方法是:

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

        【讨论】:

          【解决方案4】:

          iOS 11 和 Alamofire 4

          let webDataStore = webView.configuration.websiteDataStore
          webDataStore.httpCookieStore.getAllCookies { (cookies) in
              Alamofire.SessionManager.default.session.configuration.httpCookieStorage?.setCookies(
                  cookies,
                  for: url,
                  mainDocumentURL: nil
              )
          }
          

          【讨论】:

            【解决方案5】:
            swift 5 and Xcode 11
            let cookies = HTTPCookie.cookies(withResponseHeaderFields: response.response?.allHeaderFields as! [String: String], for: (response.response?.url)!)
            
            Alamofire.SessionManager.default.session.configuration.httpCookieStorage?.setCookies(cookies, for: response.response?.url, mainDocumentURL: nil)
            

            【讨论】:

              猜你喜欢
              • 2017-03-10
              • 1970-01-01
              • 2016-12-10
              • 1970-01-01
              • 2016-02-23
              • 1970-01-01
              • 2016-11-25
              • 2020-02-10
              • 1970-01-01
              相关资源
              最近更新 更多