繁体   English   中英

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

[英]how to get the size of chunk in http response using java if transfer encoding is chunked

如果传输编码是分块的,如何知道HTTP响应的块大小。我无法获得逻辑。 请帮助我,并提供一些示例Java代码来获取块的大小。我读过一些书,每个块的大小在块本身之前就已指定,但是我可以使用哪种逻辑来获取。 请帮助我使用Java。

谢谢。

无法提供立即可用的代码,但是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
  • 读取字节直到CRLF(\\ r \\ n或十六进制的0D0A)
  • 放弃一切; 分隔符或在尾随CRLF处停止,某些回复可能会在块大小的行添加扩展名。 除非您等待已知的键值对,否则请忽略它们。
  • 将十六进制转换为整数,它告诉您块中的数据字节数
  • 读取x个字节,并追加到ByteArrayOutputBuffer
  • 读取尾随CRLF分隔符字节并忽略它
  • 如果不是0,则再次读取大小+块数据
  • 一些响应可能会添加AfterHeaders,它们就像响应开始时的标题一样
  • 在大小为0的块之后,空行(\\ r \\ n)表示完整的HTTP响应结束。 如果没有AfterHeaders ,则应该在最后看到字节0 \\ r \\ n \\ r \\ n。 请注意,常规块可能包含空行,因此在0大小的指示符之前不要终止解析。

本示例使用\\ r \\ n占位符指示规范要求的2字节定界符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM