Java:在 HTTP Post 中发送带有其他参数的 byte[]

标签 java http post encryption arrays

我正在为最近公开的非官方 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/

相关文章:

c# - 服务堆栈在过滤器中杀死一个 HTTP 请求

http - http头的编码是什么

java - 在 2 个字符串中搜索字谜的程序中出现异常

java - Opengl 变换反馈在 Android 上正确制作

java - 我可以向 JPanel 添加 ActionListener

Java 将数据从服务器发送回客户端

javascript - 我如何使用 Axios 发布到 Django?

javascript - API调用追踪链

asp.net - 对预检请求的响应未通过访问控制检查 : No 'Access-Control-Allow-Origin' header is present on the requested resource

java - 操纵 Eclipse 插件的 java 类路径?