【问题标题】:Translate Python requests code to Java (UniRest)将 Python 请求代码翻译成 Java (UniRest)
【发布时间】:2014-01-23 12:55:15
【问题描述】:

我正在使用 Snapchat API 制作 Java 客户端。我正在使用一个端点,它从HTTP POST 获取以下参数:

{
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?或者我怎样才能窥探我自己的网络流量以查看每个代码的不同之处?对我来说,一个有效而另一个无效,这对我来说似乎很疯狂。

【问题讨论】:

  • 应该写成req.field("data", f);
  • 是的,抱歉,已更新以更正那个错字。
  • 尝试链接方法,即req = Unirest.post(path).fields(params).field("data", f),或者换行:req = req.fields(params) ; req = req.field("数据", f);
  • @Marat 哇,这太简单了,让我很生气。我花了几天时间搞砸这个!链接方法就是答案。不是很 Java-y 我想这就是我应该对多语言 REST 库的期望。请重新说明您的评论作为答案,以便我将其标记为正确。谢谢!

标签: java python http post unirest


【解决方案1】:

尝试链接方法,即

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

或换行:

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

【讨论】:

  • 关于链接的第一部分是更好的方法。 req = ... 的方式更尴尬,因为 Unirest.post(...) 返回一个 HttpRequestWithBody 的实例,但随后在该对象上调用 .field(...) 返回一个名为 MultipartBody 的不同类的实例。因此,最好将它们全部链接在一起,这样您就只能使用 MultipartBody 类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 2013-11-25
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2014-01-06
相关资源
最近更新 更多