Ты прав. Согласно их коду , если данные, которые вы отправляете, не являются файлом или потоком, это будет 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")
)
. Таким образом, вы будете отправлять байты как есть.
BTW, khttp repo кажется, заброшен, так что вам лучше перейти на другую библиотеку.По сути, любая 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)
Вы увидите свой байтовый массив (в data
):
<-- 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"
})