在分块请求中不调用URLSession didReceiveData

问题描述 投票:0回答:1

我尝试从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 app和curl在标题中的Transfer-Encoding字段中显示不同的值:

UrlSession返回"Transfer-Encoding" : "Identity"

同时curl显示Transfer-Encoding: chunked(预计)。

我试图应用this answer中描述的方法,但我得到了相同的结果。

swift http chunked-encoding urlsession http-chunked
1个回答
0
投票

我猜这个问题就是短语URLSession(configuration: .default。使用default配置,你会在一分钟后超时。据推测,这不是你想要的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.