2012-02-14 6 views
1

私はflickrに写真をアップロードするための機能をhttp://www.flickr.com/services/api/upload.api.htmlと書いておきたいと思います。私は、次のコードを書いた:HTTP Post with scalaとDispatch?

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:地図[文字列、文字列])

を= { 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を使用すると、マップ本文が空に設定されます。

+0

私は動詞を<<に変更したときに写真を使用しません。認証エラー:これらの問題のいずれにも対処できません:{} スレッド「メイン」ディスパッチで例外が発生しました。 StatusCode:予期しない応答コード:401 oauth_problem = signature_invalid&debug_sbs = POST –

+0

投稿用に別のhttpエグゼキュータを選択する必要がありますか? –

+1

見る:http://www.flickr.com/services/api/auth.spec.html。 9.1で、彼らは認証を使う方法を言う。一部のパラメータはクエリパラメータとして提供する必要があります。だから、それらのもの、api_keyなど、使用する必要があります '<<?' –