我正在为最近暴露的非官方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中获得相同的行为。
答案 0 :(得分:3)
我的理解是您需要使用base-64编码将byte[]
数据编码为字符串。尝试使用javax.xml.bind.DatatypeConverter.printBase64Binary
或第三方库作为base-64。
使用String(byte[] bytes, String encoding)
转换为字符串完全不同。