我想编写一个将照片上传到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
答案 0 :(得分:1)
我不知道这个flickr api,但是地图不应该作为请求体传递吗?
另一个评论是,他们说照片不能成为签名的一部分(以防userParams
包含它)。
所以,如果你应该使用post的正文而不是将地图放在标题中(<:<
):
def sendUploadRequest(reqParms: Map[String, String]) = { http(uploadEndPoint << reqParms as_str) }
<<
使用给定的地图作为有效负载将请求转换为发布。请注意,使用POST
会将Map正文设置为空。