Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从网页响应(amf)读取字节时出现问题_Java_Http_Amf_Datainputstream_Inputstreamreader - Fatal编程技术网

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

Java 从网页响应(amf)读取字节时出现问题,java,http,amf,datainputstream,inputstreamreader,Java,Http,Amf,Datainputstream,Inputstreamreader,我正在尝试编写一个程序,可以从网页响应中读取不同类型的编码。现在,我正试图找出如何成功读取AMF数据的响应。发送它没有问题,使用我的HttpWrapper,它可以很好地获得响应字符串,但是许多字符在翻译过程中丢失了。为此,我尝试以字节形式接收响应,然后将其转换为可读文本 我得到的最重要的一点是,字面上说,角色在翻译中迷失了方向。我使用一个名为Charles 3.8.3的程序来帮助我了解在响应中应该看到什么,包括十六进制和AMF。一般来说,对于普通字符是可以的,但是每当它看到非unicode字符时

我正在尝试编写一个程序,可以从网页响应中读取不同类型的编码。现在,我正试图找出如何成功读取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));
}
然后我尝试将其转换为十六进制,如下所示:

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));
}
for(int x=0;x
我的输出是:000000000 1000B2F312F6F6E526573756C7400046E756C6C00000**bf** 鉴于Charles 3.8.3为:000000000 1000B2F312F6F6E526573756C7400046E756C6C00000**0b**

我对如何解决这一问题束手无策,因此任何帮助都将不胜感激!
感谢您抽出时间

您的代码假定每个流都使用UTF-8编码。这是完全错误的。您需要检查内容类型响应头字段。

您的代码假设每个流都使用UTF-8编码。这是完全错误的。您需要检查内容类型响应头字段。

您的代码假设每个流都使用UTF-8编码。这是完全错误的。您需要检查内容类型响应头字段。

您的代码假设每个流都使用UTF-8编码。这是完全错误的。您需要检查内容类型响应标题字段。

看起来您正在使用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.

看起来您正在使用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.

看起来您正在使用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.

看起来您正在使用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.

响应头是“application/x-amf”。我不知道有特定的方法来读取每个响应类型。我该怎么做?谢谢你的回复@Julian ReschkeThe响应头是“application/x-amf”。我不知道有特定的方法来读取每个响应类型。我该怎么做?谢谢你的回复@Julian ReschkeThe响应头是“application/x-amf”。我不知道有特定的方法来读取每个响应类型。我该怎么做?谢谢你的回复@Julian ReschkeThe响应头是“application/x-amf”。我不知道有特定的方法来读取每个响应类型。我该怎么做?谢谢你的回复@Julian ReschkeThis在我看来工作出色。在将其转换为十六进制字符串后,我可以看到我的十六进制响应与Charles 3.8.3完全相同。非常感谢:)从我所看到的情况来看,这项工作非常出色。在将其转换为十六进制字符串后,我可以看到我的十六进制响应与Charles 3.8.3完全相同。非常感谢:)从我所看到的情况来看,这项工作非常出色。在将其转换为十六进制字符串后,我可以看到我的十六进制响应与Charles 3.8.3完全相同。非常感谢:)从我所看到的情况来看,这项工作非常出色。在将其转换为十六进制字符串后,我可以看到我的十六进制响应与Charles 3.8.3完全相同。非常感谢:)