2012-02-14 78 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