首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解压缩GZIP http-response (使用jersey客户端api,java)

解压缩GZIP http-response (使用jersey客户端api,java)
EN

Stack Overflow用户
提问于 2011-09-25 16:15:25
回答 3查看 10.5K关注 0票数 7

有人能告诉我,当从某个Http-调用获得响应时,我需要做什么才能解压缩GZIP内容。

要进行调用,我使用泽西客户机API,请参见下面的代码:

代码语言:javascript
复制
String baseURI = "http://api.stackoverflow.com/1.1/answers/7539863?body=true&comments=false";
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource wr = client.resource(baseURI); 
ClientResponse response = null;
response = wr.get(ClientResponse.class);
String response_data = response.getEntity(String.class);

System.out.println(response_data);

但是,输出是GZIP的,如下所示:

代码语言:javascript
复制
{J?J??t??`$?@??????....

如果我能实现以下几点,那就太好了:

  • 能够检测内容是否是GZIP的;
  • (如果不是),进程在字符串中类似于正常;if,所以解压缩并获得字符串

中的内容

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-27 19:30:55

只需将GZIPContentEncodingFilter添加到客户端:

代码语言:javascript
复制
client.addFilter(new GZIPContentEncodingFilter(false));
票数 15
EN

Stack Overflow用户

发布于 2011-09-25 16:27:37

不要以实体的形式检索响应。将其检索为输入流,并将其包装在java.util.zip.GZIPInputStream中:

代码语言:javascript
复制
GZipInputStream is = new GZipInputStream(response.getEntityInputStream());

然后自己读取未压缩的字节并将其转换为字符串。

另外,检查服务器是否包含header Content-Encoding: gzip。如果没有,请尝试将其包含在响应中。也许泽西有足够的智慧去做正确的事情。

票数 3
EN

Stack Overflow用户

发布于 2017-12-06 04:48:53

在泽西岛2.x (我使用2.26):

代码语言:javascript
复制
WebTarget target = ...
target.register(GZipEncoder.class);

然后,可以像往常一样在响应上使用getEntity(String.class)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7546783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档