Клиент HTTP4S. Как получить точное тело запроса и ответа

Я пишу небольшой клиент http4s

val client = SimpleHttp1Client()
val uri = Uri.fromString(requestUrl).valueOr(throw _)
val task = POST(uri, UrlForm("username" -> userName, "password" -> password)).map{request => println("request: " + request.body)}

try {
   val response = client.expect[String](task).unsafePerformSync
   println("token: " + response)
   response
} catch {
   case e: Exception => println(e.getMessage);"BadToken"
}

Результат похож на

[info] Running com.researchnow.nova.shield.NovaShieldSetup 
[info] Emit(Vector(ByteVector(44 bytes, 0x757365726e616d653d616268737269766173746176612670617373776f72643d41726)))
[info] Failed: unexpected HTTP status: 400 Bad Request
[info] token: BadToken

Как преобразовать тело двоичного запроса в String? Я хочу видеть тело и заголовки в виде открытого текста.


person Knows Not Much    schedule 26.01.2017    source источник


Ответы (1)


Я поговорил с командой http4s по gitter и нашел ответ. так как gitter talk не возвращается google, я помещаю ответ здесь

val loggedReq = req.copy(body = request.body.observe(scalaz.stream.io.stdOutBytes))
println(loggedReq)

это печатает все заголовки. Если мы что-то сделаем с loggedReq, мы получим все тело, которое будет опубликовано

loggedReq.as[String].run
person Knows Not Much    schedule 27.01.2017