2012-09-25 8 views
5

Play Framework 2.0.3(scala)では、リクエスト[_]のサイズ(バイト単位)をどのように決定しますか?Play 2.0.xでリクエストのサイズをどのように取得しますか?

私たちは、この情報をログ収集の目的で取得しようとしています。

我々は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 
} 

答えて

3

I避難所」これを試しましたが、多分

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

トリックはやりますか?単純なPOST要求では少なくとも動作します。体の長さを与えるだけです。

GETリクエストには、測定対象に応じて、request.uri.lengthが必要です。ヘッダーの合計サイズ(多少の大きなCookieがある可能性があります)。この合計を計算する場合は、POSTのコンテンツ長に追加する必要があります。

+0

リチャードに感謝、POST/PUTリクエストにContent-Lengthヘッダーを使用しました – Ash