我在iOS中遇到了分块传输编码的问题。这是KMM代码:
private const val DEFAULT_BUFFER_SIZE: Int = 8 * 1024
internal val client = HttpClient()
fun readChunkedData(url: String, onChunk: (String) -> Unit): Job {
val scope = MainScope()
return scope.launch {
client.preparePost(url).execute {
val channel: ByteReadChannel = it.body()
while (!channel.isClosedForRead) {
val buffer = ByteArray(DEFAULT_BUFFER_SIZE)
val count = channel.readAvailable(buffer)
if (count > 0) {
val trimmed = buffer
.take(count)
.map { c -> Char(c.toInt()) }
.toCharArray()
onChunk(trimmed.concatToString())
}
}
}
}
}
iOS使用达尔文引擎和Android Okhttp for Ktor
在Android中,这段代码运行良好:
但在iOS中并没有像预期的那样工作(而不是阅读块正在等待整个响应):
有什么解决办法吗?我试图使用CIO引擎,但在iOS中遇到另一个问题:TLS sessions are not supported on Native platform.
1条答案
按热度按时间xfyts7mz1#
我已经找到了问题所在。出于某种原因,iOS在接收到“纯文本”内容类型时,不会将后端响应视为分块。
然而,一旦后端响应头被更改为:
它开始正常工作: