Soru Apache Commons HttpClient GZIP'i destekliyor mu?


Apache Commons HttpClient kütüphanesi Gzip'i destekliyor mu? İstemci / sunucu iletişimini hızlandırmak için Apache sunucumuzda gzip sıkıştırmasını etkinleştirmek istedik (Android uygulamasının Sunucu ile dosyaları senkronize etmesine izin veren bir php sayfamız var).


25
2018-05-05 21:55


Menşei




Cevaplar:


Apache HttpClient 4.1, daha önce kapsam dışı olarak değerlendirilen diğer birçok özellik ile birlikte kutudan içerik sıkıştırmayı destekler.


25
2018-05-07 16:35



Bunu kutudan nasıl çıkarırım? - djechlin
4.5.3'te, sadece bir istemci tarafından HttpClientBuilder.create (). Build () kullanın ve sizin için tüm gzip isteklerini ve yanıt dekompresyonunu ele alacaktır. - Clement.Xu


Sunucunuz GZIPped içerik sağlayabiliyorsa, Apache Http client 4.1 ile ihtiyacınız olan tek şey kullanmaktır.

org.apache.http.impl.client.ContentEncodingHttpClient

bir alt sınıfı olan DefaultHttpClient.

Bu müşteri ayrıca GZIPped içeriği kabul ettiğini söyleyen başlıkları da ekleyecektir.


17
2017-08-04 12:49



Bu benim için mükemmel çalıştı, teşekkürler - Roman Minenok
HttpClient 4.2.1'de, ContentEncodingHttpClient kullanımdan kaldırıldı; kullanıcılar DecompressingHttpClient'i kullanmaya teşvik edilir, bkz. hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/... - Hbf
@Hbf ayrıca kullanımdan kaldırıldı. - djechlin
4.3'ten başlayarak, HttpClientBuilder kullanılmalı (yerine ContentEncodingHttpClient veya DecompressingHttpClient). - Jonik
İle HttpClientBuilder, gzip'i etkinleştirmek için oluşturucu üzerinde herhangi bir özel yöntem çağırmak zorunda mı? Yoksa sadece aramamalısın mı? disableContentCompression()? - benkc


Bu kutunun dışında bir desteği yoktur ve HttpClient 3.x'e eklenmesi pek olası görünmemektedir (bkz. Oldukça keskin JIRA sorunu İşte). Ancak, özel istek okuyucuları ve temel kitaplığın üzerine yerleştirilmiş manuel istek / yanıt akışı işleme ekleyerek bunu yapabilirsiniz, ancak bu çok basittir.

HttpClient 4 ile yapabileceğiniz görünüyor, ama biraz çaba harcamadan değil.

Oldukça çirkin, bana sorarsan, bu şey gerçekten ondan daha kolay olmalı.


8
2018-05-05 21:59



Eğlenceli okuma için +1 (!) - karim79
@ karim79: HttpClient'in gerçekte bir tutumu olan herkes tarafından tutulduğuna dair bir umudumdan vazgeçtim (HttpClient 4 API'sı yeterince kanıt değilmiş gibi). - skaffman
@skaffman java'da kullanmak için daha iyi bir şey var mı? - djechlin


4.1'den beri, Apache HttpClients istek ve yanıt sıkıştırmasını işliyor.

  • İstekleri sıkıştırmak zorunda değilsiniz, istek başlıklarında "Kabul-Kodlama" ayarlamaya gerek yoktur.
  • Tepki dekompresyonunu da otomatik olarak işler, yanıtta Dekompresyon işlemine gerek kalmaz.
  • 4.3'e kadar gzip'i işler ve deflate eder. Kontrol edebilirsin ResponseContentEncoding api doc İşte.

Sadece kullan:

HttpClients.custom()

hangi kullanır:

HttpClientBuilder.create()

Kütüphanede kontrol etmek isterseniz goto HttpClientBuilder kullanır RequestAcceptEncoding & ResponseContentEncoding

"DisableContentCompression ()" ile devre dışı bırakabilirsiniz

HttpClient httpClient = HttpClients.custom()
                .setConnectionManager(cm)
                .disableContentCompression() //this disables compression
                .build();

Herhangi bir engelleyici eklediğinizden emin olun, bunu geçersiz kılabilir, dikkatli kullanın.

HttpClient httpClient = HttpClients.custom()
                .setConnectionManager(cm)
                .setHttpProcessor(httpprocessor) //this interceptor can override your compression.
                .build();

2
2017-10-24 12:29





İşte java apache-http-client kütüphanesini kullanan örnek scala kodu

 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()
  }

1
2018-05-16 13:08





Özel Protokol Interceptors de yardımcı olabilir.

Feragatname: Bunu henüz denemedim.


0
2018-03-27 02:17





Bu kutudan desteklemiyor, ancak döndürülen varlıkları dönüştürebilirsiniz HttpResponse arayarak sıkıştırılmamış birine

val entity = new GzipDecompressingEntity(response.getEntity)

sonra devam edin entity.getContent her zamanki gibi.


0
2018-05-14 20:56