¿La biblioteca Apache Commons HttpClient es compatible con Gzip? Queríamos utilizar la compresión enable gzip en nuestro servidor Apache para agilizar las comunicaciones cliente/servidor (tenemos una página php que permite a nuestra aplicación Android sincronizar archivos con el servidor).¿Apache Commons HttpClient es compatible con GZIP?
Respuesta
Apache HttpClient 4.1 admite la compresión de contenido fuera de la caja junto con muchas otras características que anteriormente se consideraban fuera del alcance.
No tiene soporte para este out-of-the-box, y parece improbable que se agregue a HttpClient 3.x (vea el problema de JIRA en bitch here). Sin embargo, puede hacerlo agregando lectores de solicitudes personalizadas y el manejo manual de la solicitud/respuesta, en capas sobre la biblioteca básica, pero es complicado.
Parece que puede hacerlo con HttpClient 4, pero no sin un esfuerzo.
Bastante de mala calidad, si me preguntas, esto realmente debería ser más fácil de lo que es.
+1 para la lectura entretenida – karim79
@ karim79 (!): He abandonado toda esperanza de que HttpClient es mantenido por cualquier persona con un sentido de la realidad (como si la API HttpClient 4 no era suficiente evidencia) . – skaffman
@skaffman ¿hay algo mejor para usar en Java? – djechlin
Si el servidor es capaz de proporcionar contenido gzipped, con el cliente Apache HTTP 4.1 todo lo que necesita es utilizar
org.apache.http.impl.client.ContentEncodingHttpClient
que es una subclase de DefaultHttpClient
.
Este cliente también agregará encabezados diciendo que acepta contenido GZIPped.
Esto funcionó perfecto para mí, gracias –
En HttpClient 4.2.1, 'ContentEncodingHttpClient' está en desuso; se alienta a los usuarios a utilizar el Cliente de descompresión Http, consulte http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DecompressingHttpClient.html – Hbf
@Hbf, también obsoleto. – djechlin
Custom Protocol Interceptors pueden ayudar también.
Descargo de responsabilidad: No he intentado esto todavía.
No admite que fuera de la caja, pero se puede transformar la entidad de regresar HttpResponse
en un solo comprimido llamando
val entity = new GzipDecompressingEntity(response.getEntity)
luego proceder con entity.getContent
como siempre.
Este es el código Scala de muestra que utiliza la biblioteca de Java Apache-http-cliente
def createCloseableHttpClient(): CloseableHttpClient = {
val builder: HttpClientBuilder = HttpClientBuilder.create
val closableClient = builder.build()
closableClient
}
def postData(data: String): Unit = {
val entity = EntityBuilder.create()
.setText(data)
.setContentType(ContentType.TEXT_PLAIN)
.gzipCompress()
.build()
val post = new HttpPost(postURL + endPoint)
post.setEntity(entity)
post.setHeader("Content-Type", "application/gzip")
val client = createCloseableHttpClient()
client.execute(post)
client.close()
}
Desde 4.1, Apache HttpClients maneja petición y la respuesta de compresión. No necesita comprimir la solicitud. No es necesario configurar ninguna "Aceptación de codificación" en los encabezados de solicitud & sin necesidad de manejar Descompresión. Hasta 4.3 puede manejar gzip y desinflar. Puede marcar ResponseContentEncoding
api doc here.
sólo tiene que utilizar:
HttpClients.custom()
la que utiliza:
HttpClientBuilder.create()
Si desea comprobar en la biblioteca Goto HttpClientBuilder
se utiliza RequestAcceptEncoding
& ResponseContentEncoding
Se puede desactivar a través de "disableContentCompression () "
HttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.disableContentCompression() //this disables compression
.build();
Asegúrese de que si agrega cualquier interceptor, puede anularlo, úselo con cuidado.
HttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setHttpProcessor(httpprocessor) //this interceptor can override your compression.
.build();
- 1. Cómo habilitar el registro de apache commons HttpClient en Android
- 2. ¿La codificación gzip es compatible con JSON?
- 3. Apache HttpClient lanza una NoClassDefFoundError
- 4. Apache HttpClient GET con cuerpo
- 5. Apache Commons FTPClient.listFiles
- 6. Apache Commons FTP problems
- 7. Apache Commons JCI ReloadingClassLoader
- 8. Apache HttpClient autenticación implícita
- 9. JSP - Carga de archivos con Apache Commons
- 10. Apache HTTPClient SSLPeerUnverifiedException
- 11. Apache HttpComponents HttpClient timeout
- 12. Acelerar Apache Commons FTPClient Transfer
- 13. Cómo hacer que Apache Commons HttpClient 3.1 ignore la invalidez del certificado HTTPS?
- 14. Apache HttpClient Error interino: NoHttpResponseException
- 15. Apache HttpClient 4.1 en Android
- 16. Apache HttpClient HttpRequestRetryHandler nunca invocó
- 17. Obtener contenido de la página de Apache Commons Solicitud HTTP
- 18. Apache Commons Net FTPClient y listFiles()
- 19. ¿Qué tan seguro es apache Commons-javaflow mientras usa jasperreports
- 20. Apache Commons Correo electrónico y UTF-8
- 21. El uso apropiado de configuración Commons Apache
- 22. log4j problema de advertencia - apache commons
- 23. ¿Dónde está Apache Commons for C?
- 24. java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton
- 25. ¿Hay alguna alternativa a Apache Commons SCXML?
- 26. Cómo obtener JSF para subir archivos con Apache Commons FileUpload
- 27. Supervisión del progreso utilizando Apache Commons FTPClient
- 28. Cualquier reemplazo/competencia de Apache Commons-Configuration?
- 29. Uso de FTP Proxy con apache commons-net
- 30. HttpClient NoClassDefFoundError
¿cómo lo saco de la caja? – djechlin
En 4.5.3, simplemente use un cliente mediante HttpClientBuilder.create(). Build(), y se encargará de toda la descompresión de solicitud y respuesta gzip por usted. –