数据手册调度未正确处理HTTP 302和身份验证

时间:2013-07-31 23:43:14

标签: scala http-status-codes databinder scala-dispatch

我正在使用dispatch 0.11.0,Scala 2.10并尝试使此代码正常工作

val svc = url("https://my-server/img/cat.jpg").as(username, password)
val respBody = Http(svc OK as.Response(_.getResponseBodyAsStream))
respBody onComplete {
   case Success(stream) => {
     val fos = new java.io.FileOutputStream("myfile.jpg")
     Iterator
       .continually (stream.read)
       .takeWhile (-1 !=)
       .foreach (fos.write)
     fos.close()
   }
   case Failure(exception) => {
     Logger.log.error(exception.toString)
   }
 }

当服务器返回302时,dispatch不能正确处理authenticate并执行Failure。奇怪的是,如果我将url指向返回401的JSON端点,则身份验证工作正常。我不知道为什么服务器设置为返回2种不同的状态以进行未经授权的访问,但我需要弄清楚如何处理这个问题。任何见解都将非常感激。

谢谢, 鲍勃

1 个答案:

答案 0 :(得分:3)

尝试_!()而不是as(),它使用preemptive auth。

源:

  def as(user: String, password: String) =
    subject.setRealm(new RealmBuilder()
      .setPrincipal(user)
      .setPassword(password)
      .build())
  def as_!(user: String, password: String) =
    subject.setRealm(new RealmBuilder()
      .setPrincipal(user)
      .setPassword(password)
      .setUsePreemptiveAuth(true)
      .setScheme(AuthScheme.BASIC)
      .build())