5

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
}
4

1 に答える 1

3

私はこれを試していませんが、おそらく

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

トリックをしますか?少なくとも単純な POST リクエストでは機能します。それは体の長さを与えるだけです。

GET リクエストには、ソースの本体がありません。測定したいものに応じて、request.uri.lengthそれを行う必要があり、おそらくヘッダーの合計サイズも必要です (いくつかの大きな Cookie が存在する可能性があります)。この合計を計算する場合は、POST のコンテンツの長さに加算する必要があります。

于 2012-09-26T09:52:18.533 に答える