Ein bisschen verwirrt über HttpClient[Java] Umgang mit gzip Antworten
Meine Anwendung eine http-Anforderung, um einige api-service, der Dienst gibt eine Gzip-Reaktion. Wie kann ich sicher stellen, dass die Antwort ist ja, in gzip-format? Ich bin verwirrt, warum nach der Anfrage hatte ich nicht, um Sie zu entpacken.
Unten ist mein code:
public static String streamToString(InputStream stream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder sb = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} catch (IOException e) {
logger.error("Error while streaming to string: {}", e);
} finally {
try { stream.close(); } catch (IOException e) { }
}
return sb.toString();
}
public static String getResultFromHttpRequest(String url) throws IOException { //add retries, catch all exceptions
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet;
HttpResponse httpResponse;
InputStream stream;
try {
httpGet = new HttpGet(url);
httpGet.setHeader("Content-Encoding", "gzip, deflate");
httpResponse = httpclient.execute(httpGet);
logger.info(httpResponse.getEntity().getContentEncoding());
logger.info(httpResponse.getEntity().getContent());
if (httpResponse.getStatusLine().getStatusCode() == 200) {
stream = httpResponse.getEntity().getContent();
return streamToString(stream);
}
} catch (IllegalStateException e) {
logger.error("Error while trying to access: " + url, e);
}
return "";
}
Vielleicht ist es das Dekomprimieren automatisch, aber ich würde gerne sehen, einige Hinweise darauf, dass zumindest.
mögliche Duplikate von Apache-Commons-HttpClient-support GZIP?
irgendwie aber nicht genau.
Wenn die Umgebung ermöglicht es Ihnen, dies zu tun, sehr schnell zu prüfen, hätte die Erfassung der Zugriffe (Wireshark, Tcpdump...) zwischen der app und dem server. HTTP ist ein textbasiertes Protokoll, wenn die Antwort hat das Recht, header und body besteht hauptsächlich aus nicht-lesbaren Zeichen, es sieht aus wie die Resonanz komprimiert wird.
irgendwie aber nicht genau.
Wenn die Umgebung ermöglicht es Ihnen, dies zu tun, sehr schnell zu prüfen, hätte die Erfassung der Zugriffe (Wireshark, Tcpdump...) zwischen der app und dem server. HTTP ist ein textbasiertes Protokoll, wenn die Antwort hat das Recht, header und body besteht hauptsächlich aus nicht-lesbaren Zeichen, es sieht aus wie die Resonanz komprimiert wird.
InformationsquelleAutor iCodeLikeImDrunk | 2014-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hallo, ich bin zu spät, aber diese Antwort könnte verwendet werden, die vor demselben Problem.
Standardmäßig Inhalt dekomprimiert in der Antwort. Also, Sie haben zu deaktivieren die Standard-Kompression mit dem folgenden code:
InformationsquelleAutor Prabhat Kumar
Ich denke, dass Sie verwenden möchten DecompressingHttpClient (oder die neue HttpClientBuilder -, die fügt hinzu, dass header, die standardmäßig nicht aufrufen disableContentCompression - ich glaube nicht, dass
DefaultHttpClient
unterstützt die Komprimierung standardmäßig). Der Kunde muss senden Sie eine Accept-Encoding - header Content-Encoding geht aus der Antwort des Servers.Es ändert sich so oft! Ich fügte hinzu, die HttpClientBuilder, das scheint zu sein, die modernere Methode.
HttpClientBuilder ist nicht veraltet
ich werde schauen das an.
InformationsquelleAutor Elliott Frisch
Können Sie herausfinden, ob oder nicht eine Person erfordert Dekompression durch die Prüfung der
Content-Encoding
header. Dieser header wird neu geschrieben werden (oder entfernt werden) im Fall der automatischen content-Dekompression.die Abwesenheit von expliziten "Content-Encoding" - header impliziert Identität-Codierung, das heißt, keine Codierung
wenn ich geben Sie die api-url auf firefox, sehe ich, dass die Antwort-Header "content-encoding = gzip", "content-length "= 278", "content-type = application/json, charset=utf-8", "variieren =" Accept-Encoding"
So what? Sie können deaktivieren Sie die automatische content-Dekompression oder führen Sie mit Draht anmelden, um zu sehen, raw-HTTP-Nachricht Zusammensetzung
also, was, was? Was er meint ist, dass die Antwort enthält einen content-encoding setzen, um gzip-aber die http-response-Objekt nicht anzeigen. Ich bin in diesen Themen.
InformationsquelleAutor ok2c
Seit 4.1, Apache HttpClients Griffe Anfrage-und Antwort-Komprimierung. Sie können prüfen, ob ein Beispiel in einer anderen Antwort hier.
Immer noch in Fall, dass Sie wollen, um zu überprüfen, ob die Antwort komprimiert wurde oder nicht. Sie können drucken, die Klasse der Entität.
Im Falle von
gzip
wird die Ausgabeorg.apache.http.client.entity.GzipDecompressingEntity
& fürdeflate
seineorg.apache.http.client.entity.DecompressingEntity
InformationsquelleAutor Garry