我正在为最近公开的非官方 Snapchat API 开发 Java 客户端库。顺便说一句,到目前为止我的库的 GitHub 在这里:https://github.com/hatboysam/JavaSnap
我的大多数请求都工作正常,我可以登录、下载图像等。到目前为止,我正在使用 UniRest 来处理所有这些请求,因为我喜欢 API 的简单性。
我正在尝试按照此处概述的格式上传媒体:http://gibsonsec.org/snapchat/fulldisclosure/#uploading-and-sending-snaps-phupload-phsend
生成任何字段都没有问题。该数据是我从文件中读取并通过指定的加密算法运行的 AES-ECB 加密数据的 byte[]
。
我尝试了一些方法:
使用 UniRest 的
.field(String name, File file)
方法将文件添加为参数。我使用从byte[]
创建的临时 Dile。这会从服务器获取401 UNAUTHORIZED
,因此我认为 UniRest 在我执行此操作时添加了一些我不想要的 header 。使用
String(byte[] bytes, String encoding)
构造函数将byte[]
序列化为String
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 中获得相同的行为。
最佳答案
我的理解是,您需要使用 base-64 编码将 byte[]
数据编码为字符串。尝试使用 javax.xml.bind.DatatypeConverter.printBase64Binary
或适用于 base-64 的第三方库。
使用String(byte[] bytes, String编码)
转换为字符串是完全不同的。
关于Java:在 HTTP Post 中发送带有其他参数的 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938222/