2013-07-31 51 views
2

我使用的调度0.11.0,斯卡拉2.10并试图获得此代码工作DataBinder的调度不正确地处理HTTP 302和认证

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,调度不能正确处理authenticaton并执行失败。奇怪的是,如果我将url指向返回401的JSON端点,身份验证就可以正常工作。我不知道为什么服务器设置为返回2个不同的状态未经授权的访问,但我需要弄清楚如何处理这个问题。任何见解将不胜感激。

感谢, 鲍勃

回答

3

尝试为_!(),而不是为(),它采用抢占式身份验证。

源:

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())