2012-09-25 18 views
5

En Play Framework 2.0.3 (scala), ¿cómo se determina el tamaño (en bytes) de cualquier Solicitud [_]?¿Cómo se obtiene el tamaño de una Solicitud en Play 2.0.x?

Estamos tratando de obtener esta información para fines de registro.

Es de esperar que algún valor de request.body.asRaw, pero siempre obtener Ninguno:

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

No debe ser algo simple que nos falta, ¿verdad?


¡Gracias por las respuestas útiles! Resulta que la cabecera Content-Length sólo está presente durante la POST/PUT, así que lo utilizan para aquellos, y de repliegue a la longitud de la consulta para GET/BORRAR, así:

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

Respuesta

3

no he intenté esto, pero quizás

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

¿Haría el truco? Funcionaría para solicitudes POST simples al menos. Simplemente daría la longitud del cuerpo.

Las solicitudes GET no tienen un cuerpo, de origen, según lo que desee medir, request.uri.length debería hacerlo, y tal vez el tamaño total de los encabezados también (podría haber algunas cookies grandes). Si calcula este total, debe agregarlo a la longitud del contenido para los POST.

+0

Gracias Richard, terminamos usando el encabezado Content-Length para las solicitudes POST/PUT – Ash

Cuestiones relacionadas