【发布时间】:2015-05-05 11:07:36
【问题描述】:
我已经被这个问题困扰了很长时间了。我已经对此进行了谷歌搜索,并且还看到了与 SO 中“分块”相关的所有链接。所以,最后决定发布这个问题。让我简单介绍一下这个问题。我有 Java 代码,它使用套接字从 HTTPS 读取响应。响应被正确接收并且一切正常,除非传输编码被“分块”。我试图从套接字读取分块响应作为字节数组,当我将它转换为字符串时,响应是不可读的。我怀疑我在处理块数据时做错了什么。由于这个问题,当我尝试解压缩响应时,我也会收到“不是 GZip 格式”异常。我用来处理块的代码是
int chunkLength;
do {
String lengthLine = inStream.readLine();
if (lengthLine == null) {
return false;
}
chunkLength = Integer.parseInt(lengthLine.trim(), 16);
if (chunkLength > 0) {
byte[] chunk = new byte[chunkLength];
int bytesRead = inStream.read(chunk);
if (bytesRead < chunkLength) {
return false;
}
//Burn a CR/LF
inStream.readLine();
}//if chunkLength
} while (chunkLength > 0) ;
return true;
由于我刚开始在 SO 中提出问题,因此我可能会遗漏一些(可能很多)细节,这些细节可能需要您提供解决方案。在这种情况下请原谅我,如果您需要更多详细信息,请告诉我。任何帮助将不胜感激。干杯。
【问题讨论】:
-
为什么?为什么不使用
HttpURLConnection为您解决所有问题? -
感谢您的及时回复。我们应该使用套接字是产品中的一个约束。实际上我们在浏览器中设置代理来记录 HTTP 流量,我们使用套接字读取记录的流量。
-
HttpURLConnection使用套接字。如果有人设置了一个约束来确定您使用哪些类,那么他们不应该这样做。
标签: java sockets chunked-encoding