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.
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)
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
Vous pouvez également utiliser RequestBuilding
:
Http().singleRequest(RequestBuilding.Post(url, formData)).flatMap(Unmarshal(_).to[String])