在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
}
答案 0 :(得分:3)
我没试过,但也许
request.headers.get(play.api.http.HeaderNames.CONTENT_LENGTH)
会做的伎俩?它至少适用于简单的POST请求。它只会给身体长度。
GET请求没有正文来源 - 取决于您要衡量的内容,request.uri.length
应该这样做,也可能是标题的总大小(可能有一些大的Cookie) 。如果计算此总数,则应将其添加到POST的内容长度。