Apache Commons HttpClient是否支持GZIP?

ben*_*rre 29 java gzip apache-commons apache-commons-httpclient apache-httpclient-4.x

Apache Commons HttpClient库是否支持Gzip?我们想在我们的Apache服务器上使用enable gzip压缩来加速客户端/服务器通信(我们有一个php页面,允许我们的Android应用程序与服务器同步文件).

ok2*_*k2c 27

Apache HttpClient 4.1支持开箱即用的内容压缩以及之前被认为超出范围的许多其他功能.

  • 我怎么把它从盒子里拿出来? (55认同)

小智 17

如果您的服务器能够提供GZIPped内容,那么使用Apache Http客户端4.1就可以使用

org.apache.http.impl.client.ContentEncodingHttpClient
Run Code Online (Sandbox Code Playgroud)

这是.的子类DefaultHttpClient.

此客户端还将添加标题,表示它接受GZIPped内容.

  • 在HttpClient 4.2.1中,不推荐使用`ContentEncodingHttpClient`; 鼓励用户使用DecompressingHttpClient,请参阅http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DecompressingHttpClient.html (13认同)
  • 从4.3开始,应该使用[`HttpClientBuilder`](https://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder.html)(而不是`ContentEncodingHttpClient`或`DecompressingHttpClient`). (7认同)
  • @Hbf也弃用了. (2认同)
  • 使用`HttpClientBuilder`,您是否必须在构建器上调用任何特定方法才能启用gzip?或者你只是不必调用`disableContentCompression()`? (2认同)

Gar*_*rry 9

从 4.1 开始,Apache HttpClients 处理请求和响应压缩。

  • 您不需要压缩请求,不需要在请求头中设置任何“Accept-Encoding”。
  • 它也自动处理响应解压,无需处理响应解压。
  • 直到 4.3 它处理 gzip 和 deflate。您可以在此处查看ResponseContentEncodingapi 文档。

只需使用:

HttpClients.custom()
Run Code Online (Sandbox Code Playgroud)

它使用:

HttpClientBuilder.create()
Run Code Online (Sandbox Code Playgroud)

如果你想签入库 gotoHttpClientBuilder它使用RequestAcceptEncoding&ResponseContentEncoding

您可以通过“disableContentCompression()”禁用它

HttpClient httpClient = HttpClients.custom()
                .setConnectionManager(cm)
                .disableContentCompression() //this disables compression
                .build();
Run Code Online (Sandbox Code Playgroud)

请确保如果您添加任何拦截器,它可以覆盖它,请谨慎使用它。

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


ska*_*man 8

它不支持这种开箱即用的功能,而且似乎不太可能被添加到HttpClient 3.x(请参阅此处相当讨厌的JIRA问题).但是,您可以通过添加自定义请求阅读器和手动请求/响应流处理来实现,这些处理分层在基本库之上,但它很繁琐.

看来你可以用HttpClient 4做到这一点,但不是没有一点努力.

非常粗制滥造,如果你问我,这个东西真的应该比它更容易.

  • @ karim79:我已经放弃任何希望HttpClient由任何掌握现实的人维护的希望(好像HttpClient 4 API不足以证明). (2认同)