2012-02-14 2 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)) 
    } 

나는 다음과 같은 메서드를 호출 :

데프 sendUploadRequest (reqParms : 맵 [문자열, 문자열]) = { HTTP (uploadEndPoint.POST < : < reqParms의 as_str) }

하지만 내가 가진 다음 오류 :

<rsp stat="fail"> 
    <err code="100" msg="Invalid API Key (Key has invalid format)" /> 
</rsp> 

요청시 동일한 절차를 사용하고 정상적으로 작동합니다. 포스트의 문제점은 무엇입니까?

덕분에, 페라

답변

1

나는이 플리커 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 등의 경우에는 반드시 << <