httpclient 读取gzip问题
先描述一下问题:
1. servlet 端使用Gzip 压缩,压缩代码见下方
public static PrintWriter createGzipPw(HttpServletResponse resp) throws IOException { PrintWriter pw = new PrintWriter(new GZIPOutputStream(resp.getOutputStream())); // 在 header 中设置返回类型为 gzip resp.setHeader("Content-Encoding", "gzip"); return pw; } public static void printJSON(HttpServletResponse res,String obj) throws IOException { res.setContentType("application/json;charset=UTF-8"); // "text/html; charset=utf-8" res.setHeader("Pragma", "no-cache"); res.setHeader("Cache-Control", "no-cache"); res.setDateHeader("Expires", 0L); createGzipPw(res).print(obj); }
2, 使用 httpcomponent 解析 Gzip, 他本身是自带的 类 过滤器这里
this.addResponseInterceptor(new HttpResponseInterceptor() { @Override public void process(org.apache.http.HttpResponse resp, HttpContext arg1) throws HttpException, IOException { Header[] headers = resp.getHeaders("Content-Encoding"); for(Header header: headers){ if("gzip".equals(header.getValue())){ resp.setEntity(new GzipDecompressingEntity( resp.getEntity())); return; } } } });
3. 最后获取到 inputstream
InputStream in = httpResponse.getEntity().getContent(); //EntityUtils.toString(entity); IOUtil.copy(in, outputStream);
java.io.EOFException: Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:223) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141) at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:92) at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Unexpected end of ZLIB input stream,服务器给的流有问题,没有正常结束。
Unexpected end of ZLIB input stream,服务器给的流有问题,没有正常结束。
Unexpected end of ZLIB input stream,服务器给的流有问题,没有正常结束。