如何使用URLSession请求获取cookie?

时间:2019-09-09 12:20:46

标签: urlsession httpcookie

我正在使用URLSession发送一个请求。我收到响应,但HTTPCookieStorage.shared.cookies的值始终为0元素。我正在iOS模拟器中进行测试。

    guard let url = URL(string: "https://10.10.224.30/sdc/v2/common/token") else {
        return
    }
    let configuration = URLSessionConfiguration.default
    configuration.httpCookieAcceptPolicy = .always

    let mySession = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)

    var request = URLRequest(url: url)
    request.setValue("OTT_CLIENT", forHTTPHeaderField: "User-Agent")
    request.setValue("Basic aHR0cHdhdGNoOmY=", forHTTPHeaderField: "Authorization")
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.setValue("11044", forHTTPHeaderField: "X-Device-Identifier")
    request.setValue("Deflate/gzip/compress",
                     forHTTPHeaderField: "Accept-Encoding")
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    request.httpMethod = "POST"

    var urlParser = URLComponents()
    urlParser.queryItems = [
        URLQueryItem(name: "scope", value: "OpenId ONEApp"),
        URLQueryItem(name: "username", value: "2345679091"),
        URLQueryItem(name: "grant_type", value: "password"),
        URLQueryItem(name: "audience", value: "https://login.account.rakuten.com"),
        URLQueryItem(name: "nonce", value: "a1b2c3")

    ]
    let httpBodyString = urlParser.percentEncodedQuery
    request.httpBody = httpBodyString?.data(using: String.Encoding.utf8)

    let task = mySession.dataTask(with: request) { (data, response, error) in

        if let httpResponse = response as? HTTPURLResponse {
            let fields = httpResponse.allHeaderFields as! [String : String]
            var cookies1 =  URLSession.shared.configuration.httpCookieStorage?.cookies

            print(cookies1)

        }

    task.resume()

1 个答案:

答案 0 :(得分:0)

您可以通过将httpCookieStorage设置为任何共享对象或您的对象来实现

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>X.X.X.Final</version>
</dependency>

然后,您可以获取

 $start_date = new DateTime('2012-09-01 04:10:58');
 $since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
 echo $since_start->days.' days total<br>';
 echo $since_start->y.' years<br>';
 echo $since_start->m.' months<br>';
 echo $since_start->d.' days<br>';
 echo $since_start->h.' hours<br>';
 echo $since_start->i.' minutes<br>';
 echo $since_start->s.' seconds<br>';

您将获得cookie值。