首页 > 解决方案 > URLSession.Datatask 返回 0 字节数据

问题描述

试图弄清楚这一点,我很难过。当进行 REST 调用以从响应(GET 或 POST,每个都应该返回数据)中获取 json 数据时,我得到了 0 个字节。

这是预序列化。POST 成功在后端创建消息,后端显示正在发送响应;启用 charles 代理后,我已经确认有一个包含有效 JSON 数据的响应。

任何想法为什么这只会在iOS中失败?Postman/Charles 代理(来自 iOS 调用!)在响应中显示有效数据,但调试器什么也没得到。

提前感谢您的任何想法。

    let components = URLComponents(string: "mysuperValidURL.com")

    guard let url = components?.url else {
        return
    }

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    setUrlRequestToken(request: &request)

    let message = ChatMessage(content: message, group: group, userId: userId)

    let jsonEncoder = JSONEncoder()

    guard let data = try? jsonEncoder.encode(message) else {
        return
    }

    URLSession.shared.uploadTask(with: request, from: data) { (data, response, error) in
        // Here there be 0 bytes
    }.resume()

}

标签: iosswiftnsurlsession

解决方案


数据有时会在调试器中返回为 0 字节;添加带有调试描述的打印以确保您获得数据。在这种情况下,调试器的故障与后来的序列化错误混合在一起,导致它看起来被破坏了。

TLDR;不要相信实时调试器,使用一些打印来进行完整性检查。


推荐阅读