Cómo leer la respuesta de las cookies a través de Alamofire

Estoy tratando de leer la respuesta de las cookies para una petición post, como el Cartero a continuación

Cómo leer la respuesta de las cookies a través de Alamofire

La forma en que estoy tratando, sin éxito ahora es

    var cfg = NSURLSessionConfiguration.defaultSessionConfiguration()
    var cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage()
    cfg.HTTPCookieStorage = cookies
    cfg.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always

    var mgr = Alamofire.Manager(configuration: cfg)


    mgr.request(.POST, "http://example.com/LoginLocalClient", parameters: parameters).responseJSON { response in

                print(response.response!.allHeaderFields)

                print(NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies)
}

La primera instrucción de impresión contiene los 10 campos de encabezado sin las cookies, el segundo contiene una matriz vacía.

Alguna idea?

¿Alguna vez resolver esto? Alamofire del github ni la aceptó contestar aquí se resuelve este problema. Estoy usando una 3ra parte de la API en el que se utilizan las cookies para sus períodos de sesiones — pero no tengo idea de cómo tomarlas.
Por favor, consulte stackoverflow.com/a/41881600/2446178 para la respuesta correcta

OriginalEl autor abinop | 2015-11-29

5 Kommentare

  1. 23

    Usted necesita para extraer las cookies de la respuesta mediante la NSHTTPCookie cookiesWithResponseHeaderFields(_:forURL:) método. Aquí está un ejemplo rápido:

    func fetchTheCookies() {
        let parameters: [String: AnyObject] = [:]
    
        Alamofire.request(.POST, "http://example.com/LoginLocalClient", parameters: parameters).responseJSON { response in
            if let
                headerFields = response.response?.allHeaderFields as? [String: String],
                URL = response.request?.URL
            {
                let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL)
                print(cookies)
            }
        }
    }

    Toda la configuración de la personalización, usted está tratando de hacer no tendrá ningún efecto. Los valores establecidos son todos los valores predeterminados.

    lamentablemente no funciona para mí 🙁 también impreso campo vacío
    Nunca averiguar esto? Las Cookies siempre está vacío. Todos mis encabezados, a excepción de los Set-Cookie, sin embargo, Android se puede ver el encabezado Set-Cookie….
    estoy recibiendo el mismo problema y utilizar el código anterior pero consiguiendo 0 elementos de la galleta,podría usted por favor ayuda.
    ¿Por qué esta respuesta aceptada? Como otros han expresado, esto no soluciona el problema. Las Cookies son siempre en blanco.
    Por favor, consulte stackoverflow.com/a/41881600/2446178 para la respuesta correcta.

    OriginalEl autor cnoon

  2. 15

    Por favor, tenga en cuenta que el aceptado la respuesta no funciona si las cookies no están publicados en el encabezado de la respuesta. Al parecer, algunas de las cookies se extraen con anticipación y guardar en el almacén de cookies y no aparecerá con la respuesta.

    Debe utilizar HTTPCookieStorage.shared.cookies lugar.

    Swift 3:

            Alamofire.request(url, method: HTTPMethod.post, parameters: parameters).responseData { (responseObject) -> Void in
    
                if let responseStatus = responseObject.response?.statusCode {
                    if responseStatus != 200 {
                        //error
                    } else {
                        //view all cookies
                        print(HTTPCookieStorage.shared.cookies!)
                    }
                }
            }

    De crédito va a Travis M.

    OriginalEl autor Jonny Ramos

  3. 3

    Si sólo quieres leer todas las cookies en el dominio que usted está interactuando con, usted puede conseguir todas las cookies con este método.

    let cookies = Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.cookiesForURL(NSURL(string: "mydomain.com")! )

    Devuelve un array opcional de NSHTTPCookie elementos. (Swift 2.2 y Alamofire 3.4)

    Swift 4.1:

    let cookies = Alamofire.SessionManager.default.session.configuration.httpCookieStorage?.cookies(for: url)

    OriginalEl autor skymook

  4. 1

    @lespommes

    Este es el único camino que he recibido cookies. Ahora por fin puedo ver Set-Cookie en una respuesta:

        let parameters =  ["postLogin": ["login": "[email protected]", "password": "myPassword"]]
    
        let url = NSURL(string: "your-website-with-cookies.com")
    
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Accept")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
        request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options: [])
    
        Alamofire.request(request)
            .responseJSON { response in
    
                debugPrint(response)
    
                if response.result.isSuccess {
                    ...
                    }
                }else if (response.result.isFailure){
                    ...
                }
        }

    OriginalEl autor Boomerange

  5. 1

    el código anterior era correcto que he utilizado en esta forma –

     var allCookies: [NSHTTPCookie]?
            if let headerFields = aResponse.response?.allHeaderFields as? [String: String],
                URL = aResponse.request?.URL {
                allCookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL)
                for cookie in allCookies! {
                    print(cookie)
                    let name = cookie.name
                    if name == "nmSession" {
                        let value = cookie.value
                        print(value)
                    }
                }
    
            }

    OriginalEl autor Prakash Raj

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea