Dekomprimieren von GZIP in der http-response (mit der jersey-client-api, java)
Könnte mir jemand sagen, was ich tun müssen, um zu Dekomprimieren einer mit GZIP content, wenn du die Antwort von einem Http-Aufruf.
Um den Anruf zu machen benutze ich die Jersey-Client-API siehe code unten:
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);
Jedoch die Ausgabe von GZIP-D und sieht so aus:
{J?J??t??`$?@??????....
Wäre es gut, wenn ich könnte, folgende Maßnahmen durchzuführen:
- Lage zu erkennen, ob der Inhalt mit GZIP würde oder nicht;
- Wenn nicht, wird Verfahren wie in einen normalen String; wenn also entpacken, und bekomme den Inhalt in String
- Für Jersey 2.0 finden Sie unter stackoverflow.com/questions/17834028/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einfach GZIPContentEncodingFilter auf Ihrem client:
Nicht abrufen der Antwort als eine Einheit. Rufen Sie es als einen input-stream, und wickeln Sie es in ein java.util.zip.GZIPInputStream:
Dann Lesen Sie die unkomprimierte bytes sich und schalten Sie es in einen String.
Überprüfen Sie auch, ob der server einschließlich der HTTP-header
Content-Encoding: gzip
. Wenn nicht, versuchen Sie, wie es in der Antwort. Vielleicht Jersey ist schlau genug, das richtige zu tun.response.getHeaders()
und testen Sie die entsprechenden Werte ein. Die einzige andere Sache, die ich denken kann, ist, wenn es scheint, dass sein Müll unter einer Annahme, versuchen den anderen.In Jersey 2.x (ich benutze 2.26):
Dann
getEntity(String.class)
verwendet werden kann, auf die Antwort, wie üblich.