2013-07-15 73 views
0

獲得頭這在技術上是一個重複此主題:從調度庫(版本0.10.1)

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

我嘗試導入client.Response,而不是導入com.ning.http.client。{Response => nonconflictingname},但它接着說「對象com.ning.http.client.Response不是一個值。」我不知道這意味着什麼。

回答

1

如果您想獲得整個響應對象,你不關心非正常狀態代碼返回一個失敗的未來,那麼你可以做這樣的事情:

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

如果wated到OK狀態處理,那麼它看起來像這樣:

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

即使此代碼不起作用(每次都會失敗),我會給你答案。調度真的很挑剔。我希望有一個選擇。 –

+0

@mindreader,你得到的例外是什麼? – cmbaxter

1

我只是看着調度源中的類型並意識到了這個問題。我錯過了小=>?在錯誤的必需部分。

正確的答案是一樣的東西

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

這使得,如果你認爲它非常有意義,因爲它不知道該怎麼回報,除非你告訴它。