如何用java获取块的HTTP响应的大小,如果传输编码分块(how to get the size

2019-09-02 09:12发布

如何知道HTTP响应的块的大小,如果传输编码是chunked.I我无法获得逻辑。 请帮me.And给我提供一些样本Java代码来获得,之前使用大块其中的逻辑我可以得到itself.But每个块的大小是指定的一些书籍阅读chunk.I的大小。 用java请大家帮帮我。

谢谢。

Answer 1:

不能够给准备使用的代码但是Apache HttpClient库支持“一切”开箱即用。

这是分块响应的维基百科例子。 你不知道数据的确切字节大小,直到身体的一部分被读取。 请注意,每个块的大小是十六进制值,最后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
  • 读取的字节直到CRLF(\ r \ n或0D0A十六进制)
  • 放下一切后; 定界符或停止在尾随CRLF,一些回信可以在块大小的行添加扩展。 忽略它们,除非你等待已知的键值对。
  • 十六进制转换为整数,它会告诉你NUM的数据字节块
  • 读取的字节X Num和追加到ByteArrayOutputBuffer
  • 读取尾随CRLF定界符字节并忽略它
  • 如果不是0大小再读大小+块数据
  • 一些反应可能在反应开始添加AfterHeaders他们像头
  • 后0大小的块一个空行(\ r \ n)指示完整的HTTP响应结束。 如果没有AfterHeaders你应该看到字节0 \在端部r \ n \ r \ n。 请注意定期块可以包含空行,所以不要停止解析,直到0大小的指标。

此示例使用\ r \ n占位符以指示2字节的定界符作为规范规定



文章来源: how to get the size of chunk in http response using java if transfer encoding is chunked