2014-01-06 3 views
2

Java 클라이언트를 만들기 위해 Snapchat API를 사용하고 있습니다. 나는 PARAMS 해시를 생성 아무런 문제가없고, 나는 File 개체로 dataPython이 Java (UniRest) 코드를 요청했습니다.

{ 
username: snapchat username, 
timestamp: UNIX timestamp, 
media_id: random string, 
type: 0, 
req_token: request token, 
data: encrypted data 
} 

: 나는 HTTP POST에서 다음 매개 변수를 엔드 포인트를 사용하고 있습니다.

파이썬에서 나는 확인했다 그 다음 작품 :

파이썬 코드는 내가 자바 코드에 의해 생성 된 토큰 및 데이터/파일을 사용하고, 이렇게 전송 된 데이터가 동일 나에게 (200)를 가져옵니다
f = open('encrypted.jpg') 
params = { ... all params besides data ... } 
files = { 'data' : f } 
r = requests.post(path, params, files=files) 

.

자바에서 나는 UniRest로 다음을 수행 오전 :

Map<String, Object> params = ... same params ...; 
File f = new File('encrypted.jpg'); 
HttpRequestWithBody req = Unirest.post(path); 
req.fields(params); 
req.field("data", f); 
HttpResponse<String> resp = req.asString(); 

그러나이 나에게 서버에서 500 응답을 제공합니다. 파이썬을 정확하게 에뮬레이트하는 자바를 작성하려면 어떻게해야합니까? 또는 각자의 코드가 무엇을하고 있는지에 대한 내 네트워크 트래픽을 어떻게 알아낼 수 있습니까? 하나가 작동하고 다른 하나는 작동하지 않는다는 것을 나에게 미친 듯이 보입니다. 체인 방식으로

+0

한다'req.field 읽기, '? – PaulMcG

+0

죄송합니다. 오타를 수정했습니다. –

+0

req = Unirest.post (path) .fields (params) .field ("data", f) 또는 줄 바꾸기 : req = req.fields (params); req = req.field ("data", f); – Marat

답변

1

시도

req = Unirest.post(path).fields(params).field("data", f); 

또는 라인 변경, 즉 : (F "데이터")

req = req.fields(params); 
req = req.field("data", f); 
+0

체인 연결에 대한 첫 번째 부분이 더 좋은 방법입니다. Unrest.post (...)가'HttpRequestWithBody'의 인스턴스를 반환하기 때문에'req = ... '방법은 더 어색하지만 그 객체에'.field (...)'를 호출하면 a의 인스턴스를 반환합니다. 'MultipartBody'라고 불리는 다른 클래스입니다. 따라서'MultipartBody' 클래스로만 작업 할 수 있도록 모든 것을 함께 묶는 것이 낫습니다. –

관련 문제