web-dev-qa-db-ja.com

AkkaHTTPを使用して基本的なHTTPPostリクエストを作成する慣用的な方法

基本的な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を返す必要があるという事実は、このような単純なタスクでは非常に複雑に思えます。

11
Frank Versnel

どうやらtoEntityメソッドがFormDataクラスにある時点で追加されたようです。したがって、これは問題の最も簡単な解決策のように見えます。

val formData = FormData(combinedParams).toEntity
val r = HttpRequest(POST, url, headers, formData)
6
Frank Versnel

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
17
mattinbits

RequestBuildingを使用することもできます。

Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])
0
propi