2012-02-14 40 views
1

我想寫一個上傳照片到flickr的函數,如http://www.flickr.com/services/api/upload.api.html。我寫了下面的代碼:HTTP Post與scala和調度?

val http = new Http with thread.Safety 
val uploadEndPoint = :/("api.flickr.com")/"services"/"upload" 

然後我使用調度簽署方法

def signUploadRequest(userParams: Map[String, String], accessToken: Token, verifier: String): Map[String, String] = { 
    var map = userParams 
    map += "api_key" -> consumerKey 
    sign("", uploadEndPoint.toString, userParams, consumer, Some(accessToken), Some(verifier), Some(OAuth.oob)) 
    } 

然後我調用下面的方法:

高清sendUploadRequest(reqParms:地圖[字符串,字符串]) = { HTTP(uploadEndPoint.POST <:< reqParms as_str) }

但我得到了以下錯誤:

<rsp stat="fail"> 
    <err code="100" msg="Invalid API Key (Key has invalid format)" /> 
</rsp> 

我對請求使用相同的過程,它工作正常。郵政有什麼問題?

感謝, Feras

回答

1

我不知道這個Flickr的API,但不應該在地圖通作爲請求的身體嗎?

另一種說法是,他們說照片不能是簽名的一部分(只是在userParams包含它的情況下)。

所以,如果你要使用後的身體,而不是把地圖上的頭(這確實<:<):

def sendUploadRequest(reqParms: Map[String, String]) = { http(uploadEndPoint << reqParms as_str) } 

<<轉換請求後,使用指定的地圖作爲有效載荷。請注意,使用POST會將Map主體設置爲空。

+0

我不在簽名中使用照片,並且當我將動詞更改爲<<時,出現以下錯誤:身份驗證錯誤:無法應對以下任何挑戰:{} 線程「main」派發異常。 StatusCode:意外的響應代碼:401 oauth_problem = signature_invalid&debug_sbs = POST – 2012-02-14 11:41:59

+0

我應該爲帖子選擇不同的http執行者嗎? – 2012-02-14 11:42:56

+1

看那裏:http://www.flickr.com/services/api/auth.spec.html。在9.1§,他們說如何使用認證。一些參數必須作爲查詢參數提供。所以對於那些,api_key等,使用必須使用'<<?' – 2012-02-14 12:28:11