Захватить контент из POST-вызова URLSession - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь извлечь файл cookie из этого вызова POST, чтобы использовать его для другого вызова.

У меня есть ответ URLSession для вызова POST здесь:

<NSHTTPURLResponse: 0x600000418120> { URL: https://example.com:443/Auth/ } { Status Code: 200, Headers {
Accept =     (
    "*/*"
);
"Accept-Encoding" =     (
    "br, gzip, deflate"
);
"Accept-Language" =     (
    "en-us"
);
Authorization =     (
    "Basic keyHere=="
);
"Content-Encoding" =     (
    gzip
);
"Content-Type" =     (
    "application/json"
);
Date =     (
    "Tue, 25 Sep 2018 18:17:38 GMT"
);
Host =     (
    "example.com:443"
);
"SMSESSION-Idle-Expire" =     (
    "Tue, 25-Sep-2018 20:17:38 GMT"
);
"SMSESSION-Session-Expire" =     (
    "Wed, 26-Sep-2018 04:17:38 GMT"
);
"Set-Cookie" =     (
    "SMSESSION=sessionKeyHere==;Domain=example.com;Path=/"
);
"Transfer-Encoding" =     (
    Identity
);
"User-Agent" =     (
    "Web%20Service%20Test/1 CFNetwork/974.2.1 Darwin/18.0.0"
);
"X-Forwarded-For" =     (
    "11.111.11.11"
);
} }

Как мне получитьключ Set-Cookie SMSESSION отсюда?Есть ли правильный способ сделать это?Или я бы просто проанализировал этот ответ и вытащил ключ оттуда?

Вот моя функция:

func test() {
    let username = "myUsername"
    let password = "myPassword"
    let loginString = String(format: "%@:%@", username, password)
    let loginData = loginString.data(using: String.Encoding.utf8)!
    let base64LoginString = loginData.base64EncodedString()

    let url = URL(string: "https://example.com:443/Auth/")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in
        if let response = response {
            print(response)
        }
        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print(error)
            }
        }
    }.resume()
}

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 сентября 2018

Спасибо @Cristik за ответ.

let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
    if let response = response {
        let httpResponse = response as! HTTPURLResponse // HTTPURLResponse is a subclass of URLResponse
        print(httpResponse.allHeaderFields["Set-Cookie"] ?? "") // Cookie Value
    }
    if let data = data {
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: [])
            print(json)
        } catch {
            print(error)
        }
    }
}.resume()
...