1

我想编写一个将照片上传到 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>

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

谢谢, 费拉斯

4

1 回答 1

1

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

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

因此,如果您应该使用帖子的正文而不是将地图放在标题中(确实如此<:<):

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

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

于 2012-02-14T10:32:46.557 回答