如何使用Play2 HTTP客户端的Iteratees方法?

时间:2013-08-22 09:54:40

标签: http scala stream playframework-2.0

我打算将Iteratees与Play2 HTTP client's methods一起使用。 Play2的docs非常复杂。

采用这些Play2方法(此GET method):

 /**
 * performs a GET with supplied body
 * @param consumer that's handling the response
 */
 def get[A](consumer: ResponseHeaders => Iteratee[Array[Byte], A]):
   Future[Iteratee[Array[Byte], A]] =
     prepare("GET").executeStream(consumer)

PUT method

 /**
 * performs a PUT with supplied body
 * @param consumer that's handling the response
 */
 def putAndRetrieveStream[A, T](body: T)
   (consumer: ResponseHeaders => Iteratee[Array[Byte], A])
     (implicit wrt: Writeable[T], ct: ContentTypeOf[T]):
       Future[Iteratee[Array[Byte], A]] =
         prepare("PUT", body).executeStream(consumer)

如何调用此get方法,以便将响应的正文设为Array[Byte]?我如何调用putAndRetrieveStream方法,以便在请求的正文中发送给定的Array[Byte]

1 个答案:

答案 0 :(得分:0)

您希望结果为Array[Byte],因此您需要创建Iteratee[Array[Byte],Array[Byte]]

val resp  = req.get((r:ResponseHeaders => Iteratee.consume[Array[Byte]]()))
resp onComplete {
    case Success(iter) => iter match {
        case Done(bytes,rem) => do_something_with_bytearray(bytes)       
    }
    case Failure(t) => do_something(t)
}

类似地:

val resp = req.putAndRetrieveStream(data)((r:ResponseHeaders => Iteratee.consume[Array[Byte]]()))

其中data是您要使用put请求发送的数据。它可以是字符串或字节数组等。

注意:我没有尝试过这段代码,但这会给你正确的方向。