0
我正在做一个http代理,并且在客户端向服务器发出请求之后遇到了服务器解压缩的问题。解压缩GZIP http请求,它有几个部分
E.g. 客户端发送得到https://stackoverflow.com/questions/some_question。 服务器在几个部分发送响应。 我使用以下方法解压缩响应部分。
public static void gzipToString(ByteBuf buf) throws IOException {
Reader reader = null;
reader = new InputStreamReader(new GZIPInputStream(new ByteBufInputStream(buf)));
while (true) {
int ch = reader.read();
if (ch==-1) {
break;
}
System.out.print((char)ch);
}
}
在响应的第一部分,我得到
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/QAPage">
<head>
<title>java - GZIPInputStream to String - Stack Overflow</title>
<link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d">
<link rel="apple-touch-icon image_src" href="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a">
<link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml">
<meta name="twitter:card" content="summary">
<meta name="twitter:app:id:googleplay" content="comjava.io.EOFException: Unexpected end of ZLIB input stream
在某些时候,我得到comjava.io.EOFException:ZLIB输入流意外结束
响应的其余部分将区分下面的例外在这条线
reader = new InputStreamReader(new GZIPInputStream(new ByteBufInputStream(buf)));
java.util.zip.ZipException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91)
at com.verizon.ga.filter.ProxyHttpFilters.gzipToString3(ProxyHttpFilters.java:143)
at com.verizon.ga.filter.ProxyHttpFilters.serverToProxyResponse(ProxyHttpFilters.java:73)
事实上,第一个响应我得到EOF异常使我认为要正确解压 响应,我需要将响应的所有部分放在一起。
但由于某些原因,所有其他部分返回不是GZIP格式。 据我所知,只有第一部分有GZIP标题。和其他人,而GZIP压缩,没有头。
我该怎么办呢?