Почему я получаю заголовок ответа только в Swift

#swift #api #http #header #nsurlsession

#swift #API #http #заголовок #nsurlsession

Вопрос:

Я пытаюсь получить json с веб-сайта и использую Swift.

Почему я получаю только заголовок ответа, а не тело?

     let headers = [
        "auth": key,
        "Cache-Control": "no-cache",
    ]

    let request = NSMutableURLRequest(url: NSURL(string: url)! as URL,
                                      cachePolicy: .useProtocolCachePolicy,
                                      timeoutInterval: 10.0)
    request.httpMethod = "GET"
    request.allHTTPHeaderFields = headers

    let session = URLSession.shared
    let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {
            print(error!)
        } else {
            let httpResponse = response as? HTTPURLResponse
            print(httpResponse!)

        }
    })

    dataTask.resume()
  

Как мне это исправить?

Комментарии:

1. Что находится в data вашем обратном вызове?

2. @Zyigh Необязательно (22169 байт)

3. Извините, это был риторический вопрос. Тело ответа, которое вы получаете, находится в data. Если это данные json, вы можете захотеть их декодировать либо с помощью декодируемой структуры , либо с помощью быстрого JSON , либо с помощью чего угодно. Обратите внимание, что это необязательно, поэтому вы можете добавить условие типа guard let data = data else { print("no data"); return }

4. @Zyigh извините, я новичок в Swift, Так что вы говорите о data в completionHandler, верно?

5. Точно! completionHandler — это обратный вызов (или закрытие …), это означает, что это функция, которая вызывается в какой-то момент во время выполнения метода dataTask. Когда dataTask получает ответ от вызова api, он вызывает функцию (completionHandler) с параметрами, к которым вы можете получить доступ с данными, ответом и ошибкой. Ошибка довольно понятна, ответ — это ответ (в основном заголовки) и данные, которые вы получаете. Поскольку у вас может не быть данных, это необязательно. Вот пример swift 3, который может быть полезен для понимания code.bradymower.com /…