gpt4 book ai didi

java - 从网页响应读取字节时出现问题 (amf)

转载 作者:行者123 更新时间:2023-12-01 22:54:14 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,可以从网页响应中读取不同类型的编码。现在我正在尝试弄清楚如何成功读取 AMF 数据的响应。发送它没有问题,并且使用我的 HttpWrapper,它可以很好地获取响应字符串,但许多字符在翻译中丢失。为此,我尝试以字节形式接收响应,然后转换为可读文本。

我得到的最重要的一点是,从字面上看,字符在翻译中会丢失。我使用一个名为 Charles 3.8.3 的程序来帮助我了解我应该在响应中看到的内容,无论是十六进制还是 AMF。对于普通字符来说通常没问题,但每当它看到非 unicode 字符时,我总是得到“ef bf bd”。我的读取HTTP响应的代码如下:

BufferedReader d = new BufferedReader(new InputStreamReader(new    DataInputStream(conn.getInputStream())));
while (d.read() != -1) {
String bytes = new String(d.readLine().getBytes(), "UTF-8");
result += bytes;
}

然后我尝试将其转换为十六进制,如下所示:

for (int x = 0; x < result.length(); x++) {
byte b = (byte) result.charAt(x);
System.out.print(String.format("%02x", b & 0xFF));
}

我的输出是:0000000001000b2f312f6f6e526573756c7400046e756c6c00000**bf**而 Charles 3.8.3 是:0000000001000b2f312f6f6e526573756c7400046e756c6c00000**0b**

我对如何解决这个问题束手无策,所以任何帮助将不胜感激!感谢您的宝贵时间

最佳答案

您似乎正在使用 readLine(),因为您习惯于处理文本。维基百科说 AMF 是一种二进制编码,所以你应该能够做这样的事情,而不是通过编码/解码 noop (你需要使用 ISO-8859-1,而不是 UTF -8 才能工作)与字符串。

ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];


try (InputStream in = conn.getInputStream()) {
int read;
while ((read = in.read(buffer)) >= 0) {
out.write(buffer, 0, read);
}
}

out.toByteArray();

// Convert to hex if you want.

关于java - 从网页响应读取字节时出现问题 (amf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24335073/

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