如果传输编码被分块,如何使用java获取http响应中的块大小

use*_*917 2 http response chunked-encoding

如果传输编码被分块,如何知道HTTP响应的大小.我无法得到逻辑.请帮帮我.并提供一些示例java代码来获取chunk的大小.我在一些书中读到每个块的大小是在块本身之前指定的.但是使用哪个逻辑我可以得到它.请帮我用java.

谢谢.

Who*_*ome 5

无法准备好使用代码,但Apache HttpClient库支持开箱即用的"一切".

这是wikipedia分块响应的例子.在读取正文部分之前,您不知道数据的确切字节大小.请注意每个块的大小是十六进制值,最后0大小的块是数据的结尾.它也由2字节的CRLF分隔符终止.

Transfer-Encoding: chunked\r\n
Content-Type: text/plain\r\n
\r\n
4\r\n
Wiki\r\n
5;extkey=extvalue\r\n
pedia\r\n
E\r\n
.in\r\n
\r\n
chunks.\r\n
0\r\n
AfterBodyHeader: some value\r\n
AfterBodyHeader2: any value\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
  • 读取字节直到CRLF(十六进制为\ r \n或0D0A)
  • 放下一切; 分隔符或停止在尾随CRLF,一些回复可能会在块大小的行添加扩展名.除非等待已知的键值对,否则忽略它们.
  • 将十六进制转换为整数,它告诉你块中的数据字节数
  • 读取x个字节并附加到ByteArrayOutputBuffer
  • 读取尾随CRLF分隔符字节并忽略它
  • 如果不是0大小再次读取大小+块数据
  • 一些响应可能会添加AfterHeaders,它们在响应开始时就像标题一样
  • 在0大小的块之后,空行(\ r \n)表示完整的http响应结束.如果没有AfterHeaders,你应该在最后看到字节0\r \n\r \n.请注意,常规块可能包含空行,因此在0大小的指示符之前不要终止解析.

此示例使用\ r \n占位符表示规范要求的2字节分隔符