基本的なHTTP POSTリクエストをAkkaHTTPライブラリで作成する方法を理解しようとしています。これが私が思いついたものです。
val formData = Await.result(Marshal(FormData(combinedParams)).to[RequestEntity], Duration.Inf)
val r = HttpRequest(POST, url, headers, formData)
問題は、それが私には少し非慣用的に見えるということです。 FormDataからHttpEntityを作成する他の方法はありますか?特に、データがすぐに利用できるにもかかわらず、Await
を使用するか、Futureを返す必要があるという事実は、このような単純なタスクでは非常に複雑に思えます。
どうやらtoEntity
メソッドがFormDataクラスにある時点で追加されたようです。したがって、これは問題の最も簡単な解決策のように見えます。
val formData = FormData(combinedParams).toEntity
val r = HttpRequest(POST, url, headers, formData)
で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
RequestBuilding
を使用することもできます。
Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])