HttpURLConnection no descomprimir Gzip

Estoy tratando de usar HttpURLConnection en Gingerbread + dispositivos Android y estoy teniendo problemas con la codificación gzip. Según la documentación

"En Gingerbread, hemos añadido la compresión de respuesta transparente.HttpURLConnection agregará automáticamente este encabezado a las solicitudes de salida y manejar la respuesta correspondiente:

Aceptar-Codificación: gzip "

El problema es que esto no está sucediendo realmente. El encabezado Accept-Encoding: gzip no se agrega en absoluto. Si lo agrego manualmente, entonces esperaría que la parte de descompresión de él funcione por connection.openInputStream () para devolver automáticamente un GZipInputStream pero sólo devuelve un InputStream normal.

¿Alguien ha experimentado esto? No he visto ningún puesto de este acontecimiento por lo que es muy extraño. El proyecto se compila contra API 17 para que shouldnt ser un problema y el dispositivo está ejecutando 4.3.

Gracias.

Tuve el mismo problema y se relacionó con HTTPS . Si llama a:

 URL url = new URL("https://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

En realidad obtiene una instancia de HttpsURLConnection (una subclase de HttpURLConnection) que no maneja gzip automáticamente. En estos casos usted puede:

 conn.setRequestProperty("Accept-Encoding", "gzip"); ... InputStream inStream = new GZIPInputStream(conn.getInputStream()); 

He probado con algunos de mis dispositivos y HttpURLConnection está agregando Accept-Encoding: gzip a los encabezados.

¿Ha intentado configurar Fiddler para sus dispositivos Android para verificar los encabezados http? Tal vez su servidor no es compatible con la compresión.

He experimentado esto yo mismo y también encontró que funcionó si he añadido el encabezado y GZIPInputStream utilizado manualmente. Sin embargo, estábamos fijando nuestros encabezados manualmente (tenía un encabezado personalizado que tuvimos que añadir).

La documentación de Android dice: "De forma predeterminada, esta implementación de HttpURLConnection solicita que los servidores utilicen compresión gzip." Así que supongo que el valor predeterminado sólo se aplica si no se establecen manualmente los encabezados.

Desde Android Gingerbread (http) e ICS (http + https), cuando usas Http(s)URLConnection , Android añade el encabezado Accept-Encoding: gzip automáticamente, pero solo si no lo agregaste primero .

En ese caso, si el servidor devuelve contenido codificado por gzip, automáticamente obtendrá un GZIPInputStream y el Content-Encoding: gzip se eliminará de la respuesta. Es por eso que se llama transparente : por lo que el cliente no puede distinguir las respuestas comprimidas o no comprimidas mirando el contenido del flujo o los encabezados.

Si agrega el encabezado Accept-Encoding: gzip manualmente sin embargo, entonces el manejo transparente de gzip está deshabilitado para esa solicitud y si el servidor devuelve contenido comprimido gzip, entonces necesitará buscar el Content-Encoding: gzip y crear el GZIPInputStream Para descomprimir el contenido.

  • Reutilizando HttpURLConnection para mantener la sesión viva
  • Establecer setChunkedStreamingMode en HttpURLConnection no puede entregar datos al servidor
  • Android: Carga de una foto en Cloudinary con devolución de llamada de progreso en HttpURLConnection
  • Para transferir el archivo de PC a Android dispositivo a través de usb
  • Android sin proxy no funciona?
  • Java.net.SocketTimeoutException: timeout
  • HttpURLConnection falla en Android
  • ArrayList a DavidWebb Android
  • Android: intentando obtener datos de youtube api
  • HttpURLConnection.getResponseCode () devuelve -1 en segunda invocación
  • HttpUrlConnection.openConnection falla segunda vez
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.