Я пытаюсь прослушать данные из сервиса dweet.io .Я использую listen метод для получения данных в режиме реального времени.Он использует фрагментированные HTTP-ответы .
Я создал для этого простой сетевой менеджер
import Foundation
class NetworkManager: NSObject, URLSessionDataDelegate {
private lazy var session = URLSession(configuration: .default, delegate: self, delegateQueue: .main)
private lazy var task = self.session
.dataTask(with: URL(string: "https://dweet.io/listen/for/dweets/from/opposite-carpenter")!)
func start() {
self.task.resume()
}
// THIS METHOD IS NEVER CALLED
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
print(data)
}
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
print(error!.localizedDescription)
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
print(response)
completionHandler(.allow)
}
}
При запуске я никогда не получаю данные.Однако я получаю ответ с 200 кодами статуса и заголовками.И примерно через минуту я получаю ошибку The network connection was lost.
Одновременно я использую curl
для того же самого.И он получает данные, как ожидалось.
curl -i "https://dweet.io/listen/for/dweets/from/subdued-nation"
Еще одна вещь, которая меня смутила, заключается в том, что приложение iOS и curl показывают разные значения в поле Transfer-Encoding
в заголовках:
UrlSession
возвращает "Transfer-Encoding" : "Identity"
.
В то же время curl показывает Transfer-Encoding: chunked
(что ожидается).
Я пытался применить подход, описанный в в этом ответе , но получил тот же результат.