使用 Akka HTTP 创建基本 HTTP Post 请求的惯用方法
Idiomatic way to create a basic HTTP Post request with 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
或 return 一个 Future 的事实,即使数据很容易获得,对于这样一个简单的任务来说似乎过于复杂。
您可以使用 Marshal
来理解其他 Future,例如您需要发送请求和解组响应的 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
显然,toEntity
方法已添加到 FormData class 中。所以现在这似乎是解决问题的最简单方法:
val formData = FormData(combinedParams).toEntity
val r = HttpRequest(POST, url, headers, formData)
你也可以使用RequestBuilding
:
Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])
我正在尝试了解如何使用 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
或 return 一个 Future 的事实,即使数据很容易获得,对于这样一个简单的任务来说似乎过于复杂。
您可以使用 Marshal
来理解其他 Future,例如您需要发送请求和解组响应的 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
显然,toEntity
方法已添加到 FormData class 中。所以现在这似乎是解决问题的最简单方法:
val formData = FormData(combinedParams).toEntity
val r = HttpRequest(POST, url, headers, formData)
你也可以使用RequestBuilding
:
Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])