如何使用 spray RestAPI 从服务器端获取 http 请求 header 信息

How to get http request header info from the server side with spray RestAPI

我是 Scala 和 Spray 的新手。我根据本博客post中给出的说明编写了一个简单的RESTAPI。 http://www.smartjava.org/content/first-steps-rest-spray-and-scala

一切都按预期工作。

现在我想修改程序来打印 HTTP header 编码,语言,remote-address 等。我想打印所有 header 信息(目的是记录这些信息)

但我找不到合适的文档或示例。谁能帮我完成这个。

如果需要提取特定的header:

optionalHeaderValueByName("Encoding") { encodingHeader =>
  println(encodingHeader)
  complete("hello")
}

或者您可以访问原始请求 object 并直接提取 header。这是记录所有 header 的自定义指令:

def logHeaders(): Directive0 = extract(_.request.headers).map(println)

用法

logHeaders() {
  complete("hello")
}

下面是我如何让它工作的。

指令:

def logHeaders(innerRoute: Route): (RequestContext => Unit) = extract(_.request.headers) { headers =>
  headers.foreach(h => logger.info("header: {} = {}", h.name, h.value))
  innerRoute
}

用法:

logHeaders() {
  complete("hello")
}