web-dev-qa-db-fra.com

Méthode idiomatique de créer une requête HTTP Post de base avec Akka HTTP

J'essaie de comprendre comment créer une requête HTTP POST de base avec la bibliothèque HTTP Akka. Voici ce que je suis venu avec:

val formData = Await.result(Marshal(FormData(combinedParams)).to[RequestEntity], Duration.Inf)
val r = HttpRequest(POST, url, headers, formData)

Le fait est que cela me semble un peu non idiomatique. Existe-t-il d'autres moyens de créer une HttpEntity à partir de FormData? Particulièrement, le fait que je doive utiliser Await ou retourner un avenir même si les données sont facilement disponibles semble trop complexe pour une tâche aussi simple.

11
Frank Versnel

Apparemment, une méthode toEntity a été ajoutée à la classe FormData à un moment donné. Cela semble donc être la solution la plus simple au problème:

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

Vous pouvez utiliser Marshal pour comprendre d'autres contrats à terme, tels que ceux dont vous avez besoin pour envoyer la demande et annuler la réponse:

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

Vous pouvez également utiliser RequestBuilding:

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