2015-09-24 9 views
11

Próbuję dowiedzieć się, jak utworzyć podstawowe żądanie HTTP POST przy użyciu biblioteki HTTP Akka. Oto, co wymyśliłem:Idiomatyczny sposób tworzenia podstawowego żądania HTTP Post z użyciem protokołu Akka HTTP

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

Chodzi o to, że wydaje mi się to trochę nie idiomatyczne. Czy istnieją inne sposoby tworzenia HttpEntity z FormData? Zwłaszcza fakt, że muszę korzystać z Await lub zwrócić przyszłość, mimo że dane są łatwo dostępne, wydaje się zbyt skomplikowany w przypadku tak prostego zadania.

Odpowiedz

6

Podobno metoda toEntity został dodany do klasy FormData na niektóre punkt. To teraz wydaje się być najprostszym rozwiązaniem problemu:

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

Można użyć Marshal w sposób do zrozumienia z innymi Futures, takich jak te, które trzeba wysłać żądanie i wycofać odpowiedź:

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

może być miło pokazać wariant budowania tego jako przyszłości – Rob

Powiązane problemy