2012-09-25 2 views
5

In Play Framework 2.0.3 (scala), come si determina la dimensione (in byte) di qualsiasi richiesta [_]?Come si ottiene la dimensione di una richiesta in Play 2.0.x?

Stiamo cercando di ottenere queste informazioni per scopi di registrazione.

ci si aspetterebbe un po 'di valore da request.body.asRaw, ma abbiamo sempre ottenere Nessuno:

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

Ci deve essere qualcosa di semplice che ci manca, giusto?


Grazie per le utili risposte! Si scopre che l'intestazione Content-Length è presente solo per POST/PUT, quindi usiamo per coloro, e fallback alla lunghezza della query per GET/DELETE, in questo modo:

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

risposta

3

Mi rifugio' Ho provato questo, ma forse

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

farebbe il trucco? Funzionerebbe per le richieste POST semplici almeno. Darebbe solo la lunghezza del corpo.

Le richieste GET non hanno un corpo, di origine - a seconda di ciò che si desidera misurare, lo dovrebbe fare request.uri.length e forse anche la dimensione totale delle intestazioni (potrebbero esserci alcuni biscotti di grandi dimensioni). Se si calcola questo totale, è necessario aggiungerlo alla lunghezza del contenuto per i POST.

+0

Grazie Richard, abbiamo finito con l'intestazione Content-Length per le richieste POST/PUT – Ash