2015-09-24 14 views
11

Sto cercando di capire come creare una richiesta POST HTTP di base con la libreria HTTP Akka. Questo è ciò che mi si avvicinò con:Modo idiomatico per creare una richiesta HTTP Post base con Akka HTTP

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

Il fatto è che sembra un po 'non idiomatica per me. Esistono altri modi per creare un HttpEntity da FormData? Soprattutto il fatto che io debba usare Await o restituire un Futuro anche se i dati sono prontamente disponibili sembra troppo complesso per un compito così semplice.

risposta

6

A quanto pare un metodo toEntity è stato aggiunto alla classe formdata ad un certo punto. Quindi questa ora sembra la soluzione più semplice al problema:

val formData = FormData(combinedParams).toEntity 
val r = HttpRequest(POST, url, headers, formData) 
17

È possibile utilizzare Marshal in una di comprensione con altri Futures, come ad esempio quelle che ti servono per inviare la richiesta e unmarshall la risposta:

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 
+2

potrebbe essere bello mostrare la variante di costruzione di questo come un futuro – Rob