带有scala和Dispatch的HTTP Post?

时间:2012-02-14 10:06:09

标签: scala rest flickr scala-dispatch

我想编写一个将照片上传到flickr的函数http://www.flickr.com/services/api/upload.api.html。我写了以下代码:

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

然后我使用dispatch

签署方法
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))
  }

然后我调用以下方法:

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

但我收到以下错误:

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

我对请求使用相同的过程,它工作正常。邮政有什么问题?

谢谢, Feras

1 个答案:

答案 0 :(得分:1)

我不知道这个flickr api,但是地图不应该作为请求体传递吗?

另一个评论是,他们说照片不能成为签名的一部分(以防userParams包含它)。

所以,如果你应该使用post的正文而不是将地图放在标题中(<:<):

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

<<使用给定的地图作为有效负载将请求转换为发布。请注意,使用POST会将Map正文设置为空。