Tôi cần đăng nhập các yêu cầu máy khách http của Akka cũng như các câu trả lời của họ. Mặc dù có vẻ là một gợi ý về API để ghi lại các yêu cầu này nhưng không có tài liệu rõ ràng về cách thực hiện. Biện pháp của tôi đã được để tạo ra một yêu cầu đăng nhập mà minh bạch kết thúc tốt đẹp Http().singleRequest(req)
như sau:Làm thế nào để đăng nhập yêu cầu khách hàng 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
}
}
Thật không may, tôi phải lấy tương lai hoặc thông qua các unmarshal hoặc chỉ đơn giản yêu cầu resp.entity.dataBytes
để thu hồi phần thân của phản ứng. Tôi nhận được khai thác gỗ nhưng lời hứa được hoàn thành và tôi không còn có thể so sánh thực thể với dữ liệu thực tế nữa. Một giải pháp làm việc sẽ đăng nhập theo yêu cầu và đáp ứng và vượt qua kiểm tra trường hợp này mà không có một IllegalStateException
với "Promise đã hoàn thành" bị ném:
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
}
}
Ý tưởng chào đón.
Tôi đang cố gắng thực hiện tương tự. Bạn đã tìm thấy một giải pháp? –