Java:使用HTTP Post中的其他参数发送byte []

时间:2014-01-05 19:39:41

标签: java http post encryption bytearray

我正在为最近暴露的非官方Snapchat API开发Java Client Library。顺便说一句,到目前为止我的图书馆的GitHub在这里:https://github.com/hatboysam/JavaSnap

我有大多数请求正常工作,我可以登录,下载图像等。到目前为止,我正在使用UniRest来处理所有这些请求,因为我喜欢API的简单性。

我正在尝试按照此处列出的格式上传媒体:http://gibsonsec.org/snapchat/fulldisclosure/#uploading-and-sending-snaps-phupload-phsend

生成任何字段都没有问题。数据是byte[] AES-ECB加密数据,我从文件中读取并运行指定的加密算法。

我尝试了一些事情:

  • 使用UniRest的.field(String name, File file)方法将文件添加为参数。我使用了byte[]创建的临时Dile。这让我从服务器获得401 UNAUTHORIZED,所以我认为UniRest正在添加一些我不想要的标题。

  • 使用带有byte[]编码的String构造函数将String(byte[] bytes, String encoding)序列化为UTF-8。这让我得到500 SERVER ERROR

  • 根本不发送data字段,只是为了看看会发生什么。这让我得到400 BAD REQUEST

如果您查看Python库upload中的pysnap方法(init.py"> https://github.com/martinp/pysnap/blob/master/pysnap/ init .py)您可以看到我之前尝试做的事情已经非常简单地使用了Python的requests库。我无法弄清楚如何在Java中获得相同的行为。

1 个答案:

答案 0 :(得分:3)

我的理解是您需要使用base-64编码将byte[]数据编码为字符串。尝试使用javax.xml.bind.DatatypeConverter.printBase64Binary或第三方库作为base-64。

使用String(byte[] bytes, String encoding)转换为字符串完全不同。