如何在Play 2.0.x中获得请求的大小?

时间:2012-09-25 14:45:41

标签: scala playframework-2.0

在Play Framework 2.0.3(scala)中,如何确定任何Request [_]的大小(以字节为单位)?

我们正在尝试获取此信息以用于记录目的。

我们期望来自request.body.asRaw的某些值,但我们总是获得None:

def logRawRequest[A](request: Request[A]) {
  request.body match {
    case c: AnyContent => println("Raw: "+c.asRaw)
  }
}

我们一定有一些简单的东西,对吗?


感谢您提供有用的答案!事实证明,Content-Length标头仅用于POST / PUT,因此我们将它用于那些,并回退到GET / DELETE查询的长度,如下所示:

val requestSize = request.method match {
  case "POST" | "PUT" => request.headers.get(CONTENT_LENGTH).map(_.toInt).getOrElse(-1)
  case _ => request.toString().length
}

1 个答案:

答案 0 :(得分:3)

我没试过,但也许

request.headers.get(play.api.http.HeaderNames.CONTENT_LENGTH)

会做的伎俩?它至少适用于简单的POST请求。它只会给身体长度。

GET请求没有正文来源 - 取决于您要衡量的内容,request.uri.length应该这样做,也可能是标题的总大小(可能有一些大的Cookie) 。如果计算此总数,则应将其添加到POST的内容长度。