带有scala和Dispatch的HTTP Post



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

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

然后我调用以下方法:

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

我不知道这个flickrAPI,但映射不应该作为请求体传递吗?

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

因此,如果您应该使用post的正文,而不是将映射放在标题中(这样做<:<):

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

<<使用给定的映射作为有效载荷,将请求转换为post。请注意,使用POST会将Map主体设置为空。

最新更新