gpt4 book ai didi

java - 在 Java/Tomcat/HttpServlet 中获取二进制 HTTP Post 参数

转载 作者:可可西里 更新时间:2023-11-01 16:27:28 26 4
gpt4 key购买 nike

我有一个经过 URL 编码的二进制值,然后发布到一个 HttpServlet。下面的代码展示了我是如何第一次尝试提取这些数据的。非常简单,只是结果是一个字符串,而不是字节。

一开始这似乎可行,除了一个额外的字节出现在距离末尾三个字节的地方。我最终发现我的数据被视为 Unicode,并从一种 Unicode 编码转换为 UTF-8。

那么,除了获取整个帖子正文并自己解析之外,我如何在解码 url 编码后不将其视为字符串来提取我的数据?我是否误解了一般发布数据的规范,或者这是 Java/Tomcat 特定问题?

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// Receive/Parse the request
String requestStr = request.getParameter("request");
byte[] rawRequestMsg = requestStr.getBytes();

这是我用于请求的 Python 测试脚本的片段:

    urlRequest = urllib.urlencode( {'request': rawRequest} )

connection = urllib.urlopen(self.url, data = urlRequest)
result = connection.readlines()
connection.close()

最佳答案

有两种可能的解决方案:

  • 在发布之前对您的数据进行 ASCII 编码。 Base64 将是一个明智的选择。在您的 servlet 中对其进行解码,您将再次获得原始二进制文件。

  • 使用表单内容类型multipart/form-data ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4 ) 将您的二进制数据编码为字节流;然后您的 servlet 可以执行 servletRequest.getReader() 以二进制流的形式读取数据。

关于java - 在 Java/Tomcat/HttpServlet 中获取二进制 HTTP Post 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2017338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com