从调度库获取标头(版本0.10.1)

时间:2013-07-15 16:39:42

标签: scala scala-dispatch

这在技术上与此线程重复:

Return exact response/header?

然而,那里的代码似乎对我不起作用。我在变更日志中看到,处理方式变得微妙,但对于我的生活,我无法让它发挥作用。我认为这是我理解scala而不是库问题的问题。

import dispatch._, Defaults._

// import com.ning.http.client.Response

object HTTPDownloader extends App {


  val goog: Req = host("google.com").secure

  val res = Http(goog.HEAD OK as.Response).option()

  print(res)
  Thread.sleep(5000)
}

我正在尝试从我知道的网站上获取标题,以便我可以检查内容长度,但是编译此代码段时出现的错误是

[error] ... Download.scala:14: type mismatch;
[error]  found   : dispatch.as.Response.type
[error]  required: com.ning.http.client.Response => ?
[error]   val res = Http(goog.HEAD OK as.Response).option()

我尝试使用import com.ning.http.client导入client.Response。{Response => nonconflictingname},然后它说“对象com.ning.http.client.Response不是值。”我不知道这意味着什么。

2 个答案:

答案 0 :(得分:1)

我只是查看了调度源中的类型并实现了问题。我错过了小=> ?在错误的必要部分。

正确答案就像是

val res = Http(goog > as.Response( x => x.getHeaders)).option()

如果你考虑它会很有意义,因为除非你说出来,否则它不知道该返回什么。

答案 1 :(得分:1)

如果你想获得整个响应对象并且你不关心返回失败的未来的非OK状态代码,那么你可以这样做:

val res = Http(goog.HEAD)
res onComplete{
  case Success(resp) =>
    val headers = resp.getHeaders
    ...
  case Failure(ex) => //handle fail
}

如果您想要OK状态处理,那么它将如下所示:

val res = Http(goog.HEAD OK(r => r))