我试图弄清楚如何使用Akka HTTP库创建基本的HTTP POST请求。这就是我想出的:
val formData = Await.result(Marshal(FormData(combinedParams)).to[RequestEntity], Duration.Inf)
val r = HttpRequest(POST, url, headers, formData)
事情是,对我来说,这似乎有点不合时宜。还有其他方法可以从FormData创建HttpEntity吗?特别是我必须使用Await
或返回Future,即使数据随时可用,这对于这样一个简单的任务来说似乎过于复杂。
答案 0 :(得分:17)
您可以使用Marshal
来理解其他期货,例如您需要发送请求并解组响应:
val content = for {
request <- Marshal(formData).to[RequestEntity]
response <- Http().singleRequest(HttpRequest(method = HttpMethods.POST, uri = s"http://example.com/test", entity = request))
entity <- Unmarshal(response.entity).to[String]
} yield entity
答案 1 :(得分:6)
显然,在某些时候,FormData类中添加了toEntity
方法。所以现在这似乎是问题的最简单的解决方案:
val formData = FormData(combinedParams).toEntity
val r = HttpRequest(POST, url, headers, formData)
答案 2 :(得分:0)
您也可以使用RequestBuilding
:
Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])