Akka Http客户端:自定义标头

时间:2016-09-12 05:46:44

标签: scala rest akka-http

我正在尝试使用Akka-Http来调用REST URL。我正在关注akka文档中的this示例。 使用此我可以进行其余的通话。但我无法找到如何添加自定义请求标头。我尝试使用ModeledCustomHeader,但仍然请求没有标题。这是我的例子。

final class ApiTokenHeader(token: String) extends ModeledCustomHeader[ApiTokenHeader] {
  override def renderInRequests = false
  override def renderInResponses = false
  override val companion = ApiTokenHeader
  override def value: String = token
}
object ApiTokenHeader extends ModeledCustomHeaderCompanion[ApiTokenHeader] {
  override val name = "apiKey"
  override def parse(value: String) = Try(new ApiTokenHeader(value))
}

这就是我调用的方式,

def invokeHttpRequest(cmd: WSRequestCommand) = {
    val s: HttpRequest = HttpRequest(uri = cmd.url).addHeader(ApiTokenHeader(cmd.apiKey))

    sender ! http.singleRequest(s)
  }

我尝试使用addHeaders()代替addHeader,但Seq(ApiTokenHeader)无法正常工作,因为它会产生编译错误。

val s: HttpRequest = HttpRequest(uri = cmd.url, headers = Seq(ApiTokenHeader(cmd.apiKey)))
  

错误:(55,66)类型不匹配;发现:   需要Seq [com.myapp.http.core.ApiTokenHeader]:   scala.collection.immutable.Seq [akka.http.scaladsl.model.HttpHeader]       val s:HttpRequest = HttpRequest(uri = cmd.url,headers = Seq(ApiTokenHeader(cmd.apiKey)))   //。的addHeader(ApiTokenHeader(cmd.apiKey))

有人可以帮我为我的请求添加多个自定义标头吗?我在这里做错了什么?

2 个答案:

答案 0 :(得分:16)

尝试简单地做 你可以使用带有RawHeaders的HttpMessage上的方法:

HttpRequest(GET, "/example.com/some")
   .withHeaders(
     RawHeader("X-CSRF-TOKEN", ...))

答案 1 :(得分:2)

您应该使用scala.collection.immutable.Seq而不是不可变的

另外,不要忘记将renderInRequests和/或renderInResponses设置为true,否则您的标题会消失