Could someone tell me what I need to do in order to uncompress a GZIP content when getting the response from some Http-call.
To make the call I use the Jersey Client API, see code below:
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);
However the output is GZIP'd and looks like:
{J?J??t??`$?@??????....
It would be good if I could implement the following:
只需将GZIPContentEncodingFilter添加到您的客户端:
client.addFilter(new GZIPContentEncodingFilter(false));
Don't retrieve the response as an entity. Retrieve it as an input stream and wrap it in a java.util.zip.GZIPInputStream:
GZipInputStream is = new GZipInputStream(response.getEntityInputStream());
Then read the uncompressed bytes yourself and turn it into a String.
Also, check whether the server is including the HTTP header Content-Encoding: gzip
. If not, try including it in the response. Perhaps Jersey is smart enough to do the right thing.
In Jersey 2.x (I use 2.26):
WebTarget target = ...
target.register(GZipEncoder.class);
Then getEntity(String.class)
can be used on the response as usual.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.