Estoy tratando de descomprimir una respuesta HTTP GZIP utilizando GZIPInputStream
. Sin embargo siempre tengo la misma excepción cuando trato de leer la secuencia: java.util.zip.ZipException: invalid bit length repeat
Descomprimir la respuesta GZIPed HTTP en Java
Mi cabecera de petición HTTP:
GET www.myurl.com HTTP/1.0\r\n
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\n
Keep-Alive: 115\r\n
Connection: keep-alive\r\n
X-Requested-With: XMLHttpRequest\r\n
Cookie: Some Cookies\r\n\r\n
Al final de la cabecera de respuesta HTTP, me sale path=/Content-Encoding: gzip
, seguido de la respuesta gziped .
me trataron 2 códigos Similares para descomprimir:
ACTUALIZACIÓN: En los siguientes códigos, tBytes = (the string after 'path=/Content-Encoding: gzip').getBytes();
GZIPInputStream gzip = new GZIPInputStream (new ByteArrayInputStream (tBytes));
StringBuffer szBuffer = new StringBuffer();
byte tByte [] = new byte [1024];
while (true)
{
int iLength = gzip.read (tByte, 0, 1024); // <-- Error comes here
if (iLength < 0)
break;
szBuffer.append (new String (tByte, 0, iLength));
}
Y éste que tengo en este foro:
InputStream gzipStream = new GZIPInputStream (new ByteArrayInputStream (tBytes));
Reader decoder = new InputStreamReader (gzipStream, "UTF-8");//<- I tried ISO-8859-1 and get the same exception
BufferedReader buffered = new BufferedReader (decoder);
supongo este es un error de codificacion
Saludos,
bill0ute
Hi Wim. Gracias por tu respuesta. He actualizado el mensaje para explicar cómo obtengo tBytes. No creo que la respuesta esté fragmentada porque hay un encabezado Content-Length. Pero no estoy seguro. bill0ute – bill0ute
Hola Wim. Estoy tratando de usar el paquete HttpClient pero no puedo encontrar un Java Doc. Solo obtengo los ejemplos. ¿Podría darme un pequeño ejemplo de conexión a un socket y enviar una solicitud de obtención? Gracias – bill0ute
Eche un vistazo al tutorial, es un ejemplo simple para obtener el cuerpo de respuesta para HTTP GET: http://hc.apache.org/httpclient-3.x/tutorial.html En su caso, querrá procesa 'responseBody' como ahora procesas' tBytes'. –