#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 /…