我尝试监听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
(这是预期的)。
我尝试应用this answer中描述的方法,但是得到了相同的结果。
答案 0 :(得分:0)
我将猜测问题在于短语URLSession(configuration: .default
。使用default
配置,一分钟后您将超时。大概那不是您想要的。