【问题标题】:Scala Standalone WS with Authentication具有身份验证的 Scala 独立 WS
【发布时间】:2015-04-25 19:40:03
【问题描述】:

我想在不运行 PlayApplication 的情况下使用 Play 框架中的 WS 客户端。 所以我只在我的 build.sbt 中导入了 WS lib:

"com.typesafe.play" %% "play-ws" % "2.3.7"

我的示例独立应用程序如下所示:

object WetherWSClient extends App {

  val builder = new AsyncHttpClientConfig.Builder();
  val wsClient = new NingWSClient(builder.build());

  val holder = wsClient.url("http://weather.yahooapis.com/forecastrss?p=80020&u=f")
  holder.withHeaders("Authorization" -> ("Bearer " + "token"))
  println(holder.headers) // prints an empty Map
  val futureResponse = holder.get
  futureResponse.foreach { x => println(x.body) }

  Thread.sleep(500)
  wsClient.close
}

为什么我的请求持有者的标头是空的?它应该包含 ("Authorization -> ("Bearer" + "token"))

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    嗯...那是因为 Scala 语言提倡immutability 的理念,因此保持这种精神WsRequestHolder 也是一种immutable。所以... withHeaders 不会改变当前的 WsRequestHolder 而是返回一个新的 WsRequestHolder 实例,它提供了标头。

    这种实现的另一个原因是为了方便daisy-chaining的调用。

    所以你必须这样做,

    val holder = wsClient.url("http://weather.yahooapis.com/forecastrss?p=80020&u=f")
    val newHolder = holder.withHeaders("Authorization" -> ("Bearer " + "token"))
    println(newHolder.headers)
    

    或者使用菊花链调用,

    val holder = wsClient.url("http://weather.yahooapis.com/forecastrss?p=80020&u=f")
      .withHeaders("Authorization" -> ("Bearer " + "token"))
      .withHeaders("OtherAuthorizationHeader" -> ("Well... Daisy! " + "I got chained"))
    println(holder.headers)
    

    【讨论】:

      【解决方案2】:

      玩 2.6

      withHeaders现在已弃用。以Sarvesh的答案,现在看来:

      val holder = wsClient.url("http://weather.yahooapis.com/forecastrss?p=80020&u=f")
      val newHolder = holder.addHttpHeaders("Authorization" -> (s"Bearer $token"))
      

      或者如果你想替换所有标题:

      val newHolder = holder.withHttpHeaders("Authorization" -> (s"Bearer $token"))
      

      如果您只想添加标题,请注意立即添加! (与withHeaders 的行为相同)

      【讨论】:

        猜你喜欢
        • 2015-02-14
        • 2018-06-03
        • 1970-01-01
        • 2019-05-09
        • 2021-08-28
        • 1970-01-01
        • 2015-10-20
        • 2013-06-17
        • 1970-01-01
        相关资源
        最近更新 更多