【问题标题】:How do you get the size of a Request in Play 2.0.x?您如何在 Play 2.0.x 中获取请求的大小?
【发布时间】:2012-09-28 03:47:46
【问题描述】:

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

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    我没试过,但也许

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

    会成功吗?它至少适用于简单的 POST 请求。它只会给出身体长度。

    GET 请求没有来源的主体——取决于您要测量的内容,request.uri.length 应该这样做,并且可能还有标头的总大小(可能有一些大的 cookie)。如果您计算此总数,则应将其添加到 POST 的内容长度中。

    【讨论】:

    • 感谢 Richard,我们最终使用 Content-Length 标头进行 POST/PUT 请求
    猜你喜欢
    • 2023-03-19
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2018-06-25
    相关资源
    最近更新 更多