httpclient 读取gzip问题

发布于 2021-11-20 01:29:55 字数 2462 浏览 797 评论 3

先描述一下问题:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷清清 2021-11-26 10:38:21

 Unexpected end of ZLIB input stream,服务器给的流有问题,没有正常结束。

把昨日还给我 2021-11-26 05:06:33

 Unexpected end of ZLIB input stream,服务器给的流有问题,没有正常结束。

如此安好 2021-11-26 03:58:49

 Unexpected end of ZLIB input stream,服务器给的流有问题,没有正常结束。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文