Potrzebuję rejestrować żądania klienta HTTP akka, a także ich odpowiedzi. Chociaż wydaje się, że istnieje interfejs API do rejestrowania tych żądań, nie ma jasnej dokumentacji, jak należy to zrobić. Moje podejście było stworzenie zalogowany wniosek, który przejrzyście otacza Http().singleRequest(req)
następująco:W jaki sposób jeden dziennik żąda klienta HTTP Akka
def loggedRequest(req: HttpRequest)
(implicit system: ActorSystem, ctx: ExecutionContext, m: Materializer): Future[HttpResponse] = {
Http().singleRequest(req).map { resp ⇒
Unmarshal(resp.entity).to[String].foreach{s ⇒
system.log.info(req.toString)
system.log.info(resp.toString + "\n" + s)
}
resp
}
}
Niestety, muszę złapać przyszłość albo poprzez unmarshal lub po prostu zainteresowanie resp.entity.dataBytes
w celu odzyskania ciała odpowiedzi. Dostaję rejestrację, ale obietnica zostaje zakończona i nie mogę już zwolnić jednostki z rzeczywistych danych. Roztwór roboczy będzie rejestrować żądanie i odpowiedź i przekazać tę sprawę testową bez IllegalStateException
z „Obietnica już zakończone” wyrzucane:
describe("Logged rest requests") {
it("deliver typed responses") {
val foo = Rest.loggedRequest(Get(s"http://127.0.0.1:9000/some/path"))
val resp = foo.futureValue(patience)
resp.status shouldBe StatusCodes.OK
val res = Unmarshal(resp.entity).to[MyClass].futureValue
}
}
pomysły mile widziane.
Próbuję zrobić to samo. Znalazłeś rozwiązanie? –