0

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

返回确切的响应/标题?

但是,那里的代码似乎对我不起作用。我在调度的变更日志中看到处理已经发生了微妙的变化,但是对于我的生活,我无法让它发挥作用。我认为这是我理解 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.{ Response => nonconflictingname } 来导入 client.Response,但随后它显示“对象 com.ning.http.client.Response 不是一个值”。我不知道那是什么意思。

4

2 回答 2

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))
于 2013-07-16T12:49:42.707 回答
1

我只是查看了调度源中的类型并意识到了问题。我错过了小=>?在错误的所需部分。

正确的答案是这样的

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

如果您考虑一下,这是完全有道理的,因为除非您告诉它,否则它不知道要返回什么。

于 2013-07-15T17:06:36.027 回答