La libreria Apache Commons HttpClient supporta Gzip? Volevamo abilitare la compressione gzip sul nostro server Apache per velocizzare le comunicazioni client/server (abbiamo una pagina php che consente alla nostra applicazione Android di sincronizzare i file con il server).Apache Commons HttpClient supporta GZIP?
risposta
Apache HttpClient 4.1 supporta la compressione del contenuto fuori dalla scatola insieme a molte altre funzionalità precedentemente considerate fuori ambito.
Non ha alcun supporto per questo out-of-the-box, e sembra improbabile che venga aggiunto a HttpClient 3.x (vedi problema di JIRA piuttosto bitchy here). Puoi, tuttavia, farlo aggiungendo lettori di richieste personalizzate e gestione manuale del flusso di richieste/risposte, sovrapposti alla libreria di base, ma è un po 'complicato.
Sembra che tu possa farlo con HttpClient 4, ma non senza alcuno sforzo.
Abbastanza scadente, se me lo chiedi, questa roba dovrebbe essere più facile di quello che è.
Se il server è in grado di fornire contenuto compresso, con Apache Http cliente 4.1 tutto ciò che serve è quello di utilizzare
org.apache.http.impl.client.ContentEncodingHttpClient
che è una sottoclasse di DefaultHttpClient
.
Questo client aggiungerà anche intestazioni dicendo che accetta contenuti GZIP.
Questo ha funzionato perfettamente per me, grazie –
In HttpClient 4.2.1, 'ContentEncodingHttpClient' è deprecato; gli utenti sono incoraggiati a utilizzare DecompressingHttpClient, vedere http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DecompressingHttpClient.html – Hbf
@Hbf anche deprecato. – djechlin
Custom Protocol Interceptors può essere d'aiuto.
Disclaimer: Non ho ancora provato questo.
Non supporta fuori area di rigore ma è possibile trasformare entità tornato HttpResponse
in uno non compresso chiamando
val entity = new GzipDecompressingEntity(response.getEntity)
quindi procedere con entity.getContent
come sempre.
Ecco il codice Scala campione che utilizza la libreria Java di Apache-http-client
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()
}
Dal 4.1, Apache HttpClients gestisce richiesta e la compressione di risposta. Non è necessario comprimere la richiesta. Non è necessario impostare alcuna "Accept-Encoding" nelle intestazioni di richiesta &, non è necessario gestire la decompressione. Fino a 4.3 è in grado di gestire gzip e deflate. È possibile controllare ResponseContentEncoding
api doc here.
Basta usare:
HttpClients.custom()
che utilizza:
HttpClientBuilder.create()
Se si desidera controllare nella biblioteca goto HttpClientBuilder
utilizza RequestAcceptEncoding
& ResponseContentEncoding
È possibile disattivare tramite "disableContentCompression () "
HttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.disableContentCompression() //this disables compression
.build();
Accertarsi che se si aggiunge un interceptor, è possibile ignorarlo, utilizzarlo con attenzione.
HttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setHttpProcessor(httpprocessor) //this interceptor can override your compression.
.build();
- 1. NoClassDefFoundError - Eclipse - Apache HTTPClient
- 2. Apache Commons FTPClient Hanging
- 3. Apache Commons FTPClient.listFiles
- 4. Apache Commons JCI ReloadingClassLoader
- 5. Apache HttpClient 4.1 - Impostazioni proxy
- 6. Apache HttpClient loadbalancing connessioni pool
- 7. Apache HttpClient 4.1 su Android
- 8. Apache HttpClient GET con corpo
- 9. Scarica il file usando java apache commons?
- 10. Vestibilità esponenziale con apache commons matematica
- 11. JSP - Caricamento file con Apache Commons
- 12. Decidere tra Apache Commons exec o ProcessBuilder
- 13. utilizzo corretto di configurazione Commons Apache
- 14. java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton
- 15. java: API Preferenze vs Configurazione Apache Commons
- 16. È sicuro usare Apache commons-io IOUtils.closeQuietly?
- 17. Esiste un'alternativa ad Apache Commons SCXML?
- 18. Apache commons alternative di upload di file
- 19. problema di avviso log4j - apache commons
- 20. Apache Commons Net FTPClient e listFiles()
- 21. Problemi con timeout client ftp apache commons
- 22. Come caricare JSF con Apache Commons FileUpload
- 23. java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
- 24. Richiesta POST HTTP Streaming HTTPClient di Apache?
- 25. HttpClient che supporta più protocolli TLS
- 26. Ottieni mediana dalle serie numeriche usando Apache Commons Math
- 27. HttpClient NoClassDefFoundError
- 28. Apache HttpClient e file di certificato PEM
- 29. Apache HttpClient 4.3 su Android 4.4
- 30. java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
come lo tolgo dalla scatola? – djechlin
In 4.5.3, basta usare un client HttpClientBuilder.create(). Build(), e gestirà tutte le richieste di gzip e la decompressione della risposta. –