这在技术上与此线程重复:
然而,那里的代码似乎对我不起作用。我在变更日志中看到,处理方式变得微妙,但对于我的生活,我无法让它发挥作用。我认为这是我理解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不是值。”我不知道这意味着什么。
答案 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))