In Play Framework 2.0.3 (scala), how do you determine the size (in bytes) of any Request[_]?
We're trying to obtain this information for logging purposes.
We would expect some value from request.body.asRaw, but we always obtain None:
def logRawRequest[A](request: Request[A]) {
request.body match {
case c: AnyContent => println("Raw: "+c.asRaw)
}
}
There must be something simple that we're missing, right?
Thanks for the helpful answers! It turns out that the Content-Length header is only present for POST/PUT, so we use it for those, and fallback to the length of the query for GET/DELETE, like this:
val requestSize = request.method match {
case "POST" | "PUT" => request.headers.get(CONTENT_LENGTH).map(_.toInt).getOrElse(-1)
case _ => request.toString().length
}
I haven't tried this, but maybe
would do the trick? It would work for simple POST requests at least. It would just give the body length.
GET requests don't have a body, of source -- depending on what you want to measure,
request.uri.length
should do it, and maybe the total size of the headers also (there could be some large cookies). If you calculate this total, you should add it to content length for POSTs.