Akka Http客户端:自定义标头

Yad*_*nan 6 rest scala akka-http

我正在尝试使用Akka-Http来调用REST URL.我是从akka文档中关注这个例子的.使用此我可以进行其余的通话.但我无法找到如何添加自定义请求标头.我尝试使用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))
}
Run Code Online (Sandbox Code Playgroud)

这就是我调用的方式,

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

    sender ! http.singleRequest(s)
  }
Run Code Online (Sandbox Code Playgroud)

而不是addHeader,我尝试使用addHeaders(),但Seq(ApiTokenHeader)不起作用,因为它给出了编译错误.

val s: HttpRequest = HttpRequest(uri = cmd.url, headers = Seq(ApiTokenHeader(cmd.apiKey)))
Run Code Online (Sandbox Code Playgroud)

错误:(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))

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

Rom*_*kyi 19

尝试一下,只需将HttpMessage上的方法与RawHeaders一起使用即可:

HttpRequest(GET, "/example.com/some")
   .withHeaders(
     RawHeader("X-CSRF-TOKEN", ...))
Run Code Online (Sandbox Code Playgroud)