2014-01-06 49 views
2

我正在使用Snapchat API來創建Java客戶端。我使用的端點,其從HTTP POST採用以下參數:將Python請求代碼轉換爲Java(UniRest)

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

我沒有問題產生params哈希表,和我有data作爲File對象。

在Python我已經證實了以下工作:

f = open('encrypted.jpg') 
params = { ... all params besides data ... } 
files = { 'data' : f } 
r = requests.post(path, params, files=files) 

這Python的代碼我200我使用的Java代碼生成的令牌和數據/文件,所以發送的數據是相同的。

在Java中我做與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。我怎樣才能編寫精確模擬Python的Java?或者我怎麼能窺探我自己的網絡流量,看看每個代碼在做什麼的區別?對我來說似乎很瘋狂,一個人工作,另一個不工作。

+0

應該就是讀'req.field( 「數據」 中,f);'? – 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); 

或改變行:

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

關於鏈接的第一部分是更好的方法。 'req = ...'方式更笨拙,因爲Unirest.post(...)返回一個'HttpRequestWithBody'實例,但是在該對象上調用'.field(...)'返回一個不同的班級稱爲'MultipartBody'。所以最好將它鏈接在一起,所以你只能使用'MultipartBody'類。 –