मुझे अक्का http क्लाइंट अनुरोधों के साथ-साथ उनके प्रतिक्रियाओं को लॉग इन करने की आवश्यकता है। हालांकि इन अनुरोधों को लॉग इन करने के लिए एपीआई का संकेत मिलता है, इस पर कोई स्पष्ट दस्तावेज नहीं है कि इसे कैसे किया जाना चाहिए। मेरे दृष्टिकोण एक लॉग इन अनुरोध जो पारदर्शी रूप से Http().singleRequest(req)
लपेटता इस प्रकार बनाने के लिए किया गया है:एक कैसे Akka HTTP क्लाइंट अनुरोध लॉग करता है
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
}
}
दुर्भाग्य से, मैं या तो unmarshal के माध्यम से या बस आदेश प्रतिक्रिया के शरीर ठीक करने के लिए में resp.entity.dataBytes
अनुरोध करके भविष्य हड़पने के लिए की है। मुझे लॉगिंग मिलती है लेकिन वादा पूरा हो जाता है और मैं वास्तविक डेटा को इकाई को अनधिकृत नहीं कर सकता। एक काम कर समाधान अनुरोध और प्रतिक्रिया लॉग इन करें और "वादा पहले ही पूरा हो" के साथ एक IllegalStateException
के बिना इस परीक्षण का मामला होकर गुजरेगा फेंके:
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
}
}
विचार स्वागत करते हैं।
मैं ऐसा करने की कोशिश कर रहा हूं। क्या आपको एक समाधान मिला? –