12

我试图弄清楚如何使用 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 的事实似乎过于复杂。

4

3 回答 3

18

您可以将Marshalfor 理解与其他 Future 一起使用,例如您需要发送请求和解组响应的那些:

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
于 2015-09-24T11:14:52.407 回答
6

显然toEntity,在某个时候向 FormData 类添加了一个方法。所以现在这似乎是解决问题的最简单的方法:

val formData = FormData(combinedParams).toEntity
val r = HttpRequest(POST, url, headers, formData)
于 2016-07-28T06:40:10.537 回答
0

您还可以使用RequestBuilding

Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])
于 2018-12-06T10:50:36.600 回答