Как вы отправляете необработанный byteArray как тело почтового запроса в Khttp? - PullRequest
0 голосов
/ 15 ноября 2018

Из источника khttp кажется, что вы не можете отправить raw byteArray в качестве тела запроса, потому что он всегда добавляет к нему отступы. Я также пытался использовать библиотеку Fuel, но для этого требуются сопрограммы, конфликтующие с моими зависимостями.

Кто-нибудь знает, как 1) отправить необработанное байтовое тело в khttp или 2) другую библиотеку, которая

1 Ответ

0 голосов
/ 15 ноября 2018

Ты прав. Согласно их коду , если данные, которые вы отправляете, не являются файлом или потоком, это будет 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"
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...