使用Akka HTTP创建基本HTTP Post请求的惯用法

时间:2015-09-24 09:14:42

标签: scala akka akka-http

我试图弄清楚如何使用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,即使数据随时可用,这对于这样一个简单的任务来说似乎过于复杂。

3 个答案:

答案 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])