Java 在khttp中,如何将原始byteArray作为post请求主体发送?

Java 在khttp中,如何将原始byteArray作为post请求主体发送?,java,kotlin,httpclient,backend,Java,Kotlin,Httpclient,Backend,从khttp的来源来看,您似乎无法将原始byteArray作为请求主体发送,因为它总是向请求主体添加填充。我也尝试过使用Fuel库,但它需要与依赖项冲突的协程 有人知道如何1)在khttp中发送原始字节正文,或2)另一个库发送原始字节正文吗。如果您发送的数据不是文件或流,它将是toString()'d,而这不是您想要的。因此,您可以尝试提供ByteArrayInputStream,而不是ByteArray: val response = post( "https://httpbin.or

从khttp的来源来看,您似乎无法将原始byteArray作为请求主体发送,因为它总是向请求主体添加填充。我也尝试过使用Fuel库,但它需要与依赖项冲突的协程

有人知道如何1)在khttp中发送原始字节正文,或2)另一个库发送原始字节正文吗。如果您发送的数据不是文件或流,它将是
toString()'d
,而这不是您想要的。因此,您可以尝试提供
ByteArrayInputStream
,而不是
ByteArray

val response = post(
    "https://httpbin.org/anything",
    data = ByteArrayInputStream(byteArrayOf(1, 2, 3)),
    headers = mapOf("Content-Type" to "application/octet-stream")
)
因此,您将按原样发送字节

顺便说一句,似乎被放弃了,所以你最好切换到另一个库。基本上,任何HTTP库都可以发送原始字节。至于燃料:它遵循模块化架构,不需要100%使用协同程序:

val (request, response, result) = "https://httpbin.org/anything".httpPost()
    .body(byteArrayOf(1, 2, 3))
    .header(mapOf("Content-Type" to "application/octet-stream"))
    .response()

println(response)
您将看到字节数组(在
数据中)


发现我的冲突依赖项是因为我使用的是实验性的协同程序。将Kotlin升级到1.3.10等,工作正常。谢谢
<-- 200 (https://httpbin.org/anything)
Response : OK
Length : 564
Body : ({
    "args": {}, 
    "data": "\u0001\u0002\u0003", 
    "files": {}, 
    "form": {}, 
    "headers": {
        "Accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", 
        "Accept-Encoding": "compress;q=0.5, gzip;q=1.0", 
        "Cache-Control": "no-cache", 
        "Connection": "close", 
        "Content-Length": "3", 
        "Content-Type": "application/octet-stream", 
        "Host": "httpbin.org", 
        "Pragma": "no-cache", 
        "User-Agent": "Java/1.8.0_192"
    }, 
    "json": null, 
    "method": "POST", 
    "origin": "1.2.3.4", 
    "url": "https://httpbin.org/anything"
})