4444import java .util .concurrent .ThreadFactory ;
4545import java .util .function .Consumer ;
4646
47- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultAcquireFreeChannelTimeout ;
48- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultAggregateWebSocketFrameFragments ;
49- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultChunkedFileChunkSize ;
50- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultCompressionEnforced ;
51- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultConnectTimeout ;
52- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultConnectionPoolCleanerPeriod ;
53- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultConnectionTtl ;
54- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultDisableHttpsEndpointIdentificationAlgorithm ;
55- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultDisableUrlEncodingForBoundRequests ;
56- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultDisableZeroCopy ;
57- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultEnableWebSocketCompression ;
58- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultEnabledCipherSuites ;
59- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultEnabledProtocols ;
60- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultExpiredCookieEvictionDelay ;
61- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultFilterInsecureCipherSuites ;
62- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultFollowRedirect ;
63- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHandshakeTimeout ;
64- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHashedWheelTimerSize ;
65- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHashedWheelTimerTickDuration ;
66- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHttpClientCodecInitialBufferSize ;
67- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHttpClientCodecMaxChunkSize ;
68- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHttpClientCodecMaxHeaderSize ;
69- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultHttpClientCodecMaxInitialLineLength ;
70- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultIoThreadsCount ;
71- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultKeepAlive ;
72- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultKeepEncodingHeader ;
73- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultMaxConnections ;
74- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultMaxConnectionsPerHost ;
75- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultMaxRedirects ;
76- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultMaxRequestRetry ;
77- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultPooledConnectionIdleTimeout ;
78- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultReadTimeout ;
79- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultRequestTimeout ;
80- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultShutdownQuietPeriod ;
81- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultShutdownTimeout ;
82- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSoKeepAlive ;
83- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSoLinger ;
84- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSoRcvBuf ;
85- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSoReuseAddress ;
86- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSoSndBuf ;
87- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSslSessionCacheSize ;
88- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultSslSessionTimeout ;
89- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultStrict302Handling ;
90- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultTcpNoDelay ;
91- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultThreadPoolName ;
92- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseInsecureTrustManager ;
93- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseLaxCookieEncoder ;
94- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseNativeTransport ;
95- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseOnlyEpollNativeTransport ;
96- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseOpenSsl ;
97- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseProxyProperties ;
98- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUseProxySelector ;
99- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultUserAgent ;
100- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultValidateResponseHeaders ;
101- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultWebSocketMaxBufferSize ;
102- import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .defaultWebSocketMaxFrameSize ;
47+ import static org .asynchttpclient .config .AsyncHttpClientConfigDefaults .*;
10348
10449/**
10550 * Configuration class to use with a {@link AsyncHttpClient}. System property can be also used to configure this object default behavior by doing: <br>
@@ -114,6 +59,8 @@ public class DefaultAsyncHttpClientConfig implements AsyncHttpClientConfig {
11459 private final int maxRedirects ;
11560 private final boolean strict302Handling ;
11661 private final boolean compressionEnforced ;
62+
63+ private final boolean enableAutomaticDecompression ;
11764 private final String userAgent ;
11865 private final Realm realm ;
11966 private final int maxRequestRetry ;
@@ -203,6 +150,7 @@ private DefaultAsyncHttpClientConfig(// http
203150 int maxRedirects ,
204151 boolean strict302Handling ,
205152 boolean compressionEnforced ,
153+ boolean enableAutomaticDecompression ,
206154 String userAgent ,
207155 Realm realm ,
208156 int maxRequestRetry ,
@@ -292,6 +240,7 @@ private DefaultAsyncHttpClientConfig(// http
292240 this .maxRedirects = maxRedirects ;
293241 this .strict302Handling = strict302Handling ;
294242 this .compressionEnforced = compressionEnforced ;
243+ this .enableAutomaticDecompression = enableAutomaticDecompression ;
295244 this .userAgent = userAgent ;
296245 this .realm = realm ;
297246 this .maxRequestRetry = maxRequestRetry ;
@@ -410,6 +359,11 @@ public boolean isCompressionEnforced() {
410359 return compressionEnforced ;
411360 }
412361
362+ @ Override
363+ public boolean isEnableAutomaticDecompression () {
364+ return enableAutomaticDecompression ;
365+ }
366+
413367 @ Override
414368 public String getUserAgent () {
415369 return userAgent ;
@@ -777,6 +731,7 @@ public static class Builder {
777731 private int maxRedirects = defaultMaxRedirects ();
778732 private boolean strict302Handling = defaultStrict302Handling ();
779733 private boolean compressionEnforced = defaultCompressionEnforced ();
734+ private boolean enableAutomaticDecompression = defaultEnableAutomaticDecompression ();
780735 private String userAgent = defaultUserAgent ();
781736 private Realm realm ;
782737 private int maxRequestRetry = defaultMaxRequestRetry ();
@@ -869,6 +824,7 @@ public Builder(AsyncHttpClientConfig config) {
869824 maxRedirects = config .getMaxRedirects ();
870825 strict302Handling = config .isStrict302Handling ();
871826 compressionEnforced = config .isCompressionEnforced ();
827+ enableAutomaticDecompression = config .isEnableAutomaticDecompression ();
872828 userAgent = config .getUserAgent ();
873829 realm = config .getRealm ();
874830 maxRequestRetry = config .getMaxRequestRetry ();
@@ -963,11 +919,31 @@ public Builder setStrict302Handling(final boolean strict302Handling) {
963919 return this ;
964920 }
965921
922+ /**
923+ * If true, AHC will add Accept-Encoding HTTP header to each request
924+ *
925+ * If false (default), AHC will either leave AcceptEncoding header as is
926+ * (if enableAutomaticDecompression is false) or will remove unsupported
927+ * algorithms (if enableAutomaticDecompression is true)
928+ */
966929 public Builder setCompressionEnforced (boolean compressionEnforced ) {
967930 this .compressionEnforced = compressionEnforced ;
968931 return this ;
969932 }
970933
934+
935+ /*
936+ * If true (default), AHC will add a Netty HttpContentDecompressor, so compressed
937+ * content will automatically get decompressed.
938+ *
939+ * If set to false, response will be delivered as is received. Decompression must
940+ * be done by calling code.
941+ */
942+ public Builder setEnableAutomaticDecompression (boolean enable ) {
943+ this .enableAutomaticDecompression = enable ;
944+ return this ;
945+ }
946+
971947 public Builder setUserAgent (String userAgent ) {
972948 this .userAgent = userAgent ;
973949 return this ;
@@ -1390,6 +1366,7 @@ public DefaultAsyncHttpClientConfig build() {
13901366 maxRedirects ,
13911367 strict302Handling ,
13921368 compressionEnforced ,
1369+ enableAutomaticDecompression ,
13931370 userAgent ,
13941371 realm ,
13951372 maxRequestRetry ,
0 commit comments