mirror of
https://github.com/apache/httpcomponents-client.git
synced 2025-02-16 23:16:33 +00:00
HTTPCLIENT-1651: Add ability to disable content compression on a request basis
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1682442 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
da8738d14a
commit
5f3ba04de2
@ -58,12 +58,13 @@ public class RequestConfig implements Cloneable {
|
||||
private final int connectTimeout;
|
||||
private final int socketTimeout;
|
||||
private final boolean decompressionEnabled;
|
||||
private final boolean contentCompressionEnabled;
|
||||
|
||||
/**
|
||||
* Intended for CDI compatibility
|
||||
*/
|
||||
protected RequestConfig() {
|
||||
this(false, null, null, false, null, false, false, false, 0, false, null, null, 0, 0, 0, false);
|
||||
this(false, null, null, false, null, false, false, false, 0, false, null, null, 0, 0, 0, false, false);
|
||||
}
|
||||
|
||||
RequestConfig(
|
||||
@ -82,7 +83,8 @@ protected RequestConfig() {
|
||||
final int connectionRequestTimeout,
|
||||
final int connectTimeout,
|
||||
final int socketTimeout,
|
||||
final boolean decompressionEnabled) {
|
||||
final boolean decompressionEnabled,
|
||||
final boolean contentCompressionEnabled) {
|
||||
super();
|
||||
this.expectContinueEnabled = expectContinueEnabled;
|
||||
this.proxy = proxy;
|
||||
@ -99,6 +101,7 @@ protected RequestConfig() {
|
||||
this.connectTimeout = connectTimeout;
|
||||
this.socketTimeout = socketTimeout;
|
||||
this.decompressionEnabled = decompressionEnabled;
|
||||
this.contentCompressionEnabled = contentCompressionEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -298,6 +301,18 @@ public boolean isDecompressionEnabled() {
|
||||
return decompressionEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the target server is requested to compress content.
|
||||
* <p>
|
||||
* Default: {@code true}
|
||||
* </p>
|
||||
*
|
||||
* @since 4.5
|
||||
*/
|
||||
public boolean isContentCompressionEnabled() {
|
||||
return contentCompressionEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RequestConfig clone() throws CloneNotSupportedException {
|
||||
return (RequestConfig) super.clone();
|
||||
@ -322,6 +337,7 @@ public String toString() {
|
||||
builder.append(", connectTimeout=").append(connectTimeout);
|
||||
builder.append(", socketTimeout=").append(socketTimeout);
|
||||
builder.append(", decompressionEnabled=").append(decompressionEnabled);
|
||||
builder.append(", contentCompressionEnabled=").append(contentCompressionEnabled);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
@ -346,7 +362,8 @@ public static RequestConfig.Builder copy(final RequestConfig config) {
|
||||
.setConnectionRequestTimeout(config.getConnectionRequestTimeout())
|
||||
.setConnectTimeout(config.getConnectTimeout())
|
||||
.setSocketTimeout(config.getSocketTimeout())
|
||||
.setDecompressionEnabled(config.isDecompressionEnabled());
|
||||
.setDecompressionEnabled(config.isDecompressionEnabled())
|
||||
.setContentCompressionEnabled(config.isContentCompressionEnabled());
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
@ -367,6 +384,7 @@ public static class Builder {
|
||||
private int connectTimeout;
|
||||
private int socketTimeout;
|
||||
private boolean decompressionEnabled;
|
||||
private boolean contentCompressionEnabled;
|
||||
|
||||
Builder() {
|
||||
super();
|
||||
@ -379,6 +397,7 @@ public static class Builder {
|
||||
this.connectTimeout = -1;
|
||||
this.socketTimeout = -1;
|
||||
this.decompressionEnabled = true;
|
||||
this.contentCompressionEnabled = true;
|
||||
}
|
||||
|
||||
public Builder setExpectContinueEnabled(final boolean expectContinueEnabled) {
|
||||
@ -456,6 +475,11 @@ public Builder setDecompressionEnabled(final boolean decompressionEnabled) {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setContentCompressionEnabled(final boolean contentCompressionEnabled) {
|
||||
this.contentCompressionEnabled = contentCompressionEnabled;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestConfig build() {
|
||||
return new RequestConfig(
|
||||
expectContinueEnabled,
|
||||
@ -473,7 +497,8 @@ public RequestConfig build() {
|
||||
connectionRequestTimeout,
|
||||
connectTimeout,
|
||||
socketTimeout,
|
||||
decompressionEnabled);
|
||||
decompressionEnabled,
|
||||
contentCompressionEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,6 +33,7 @@
|
||||
import org.apache.http.HttpRequest;
|
||||
import org.apache.http.HttpRequestInterceptor;
|
||||
import org.apache.http.annotation.Immutable;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
|
||||
/**
|
||||
@ -76,8 +77,11 @@ public void process(
|
||||
final HttpRequest request,
|
||||
final HttpContext context) throws HttpException, IOException {
|
||||
|
||||
final HttpClientContext clientContext = HttpClientContext.adapt(context);
|
||||
final RequestConfig requestConfig = clientContext.getRequestConfig();
|
||||
|
||||
/* Signal support for Accept-Encoding transfer encodings. */
|
||||
if (!request.containsHeader("Accept-Encoding")) {
|
||||
if (!request.containsHeader("Accept-Encoding") && requestConfig.isContentCompressionEnabled()) {
|
||||
request.addHeader("Accept-Encoding", acceptEncoding);
|
||||
}
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ public void testDefaults() {
|
||||
Assert.assertEquals(null, config.getProxy());
|
||||
Assert.assertEquals(null, config.getTargetPreferredAuthSchemes());
|
||||
Assert.assertEquals(null, config.getProxyPreferredAuthSchemes());
|
||||
Assert.assertEquals(true, config.isContentCompressionEnabled());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -78,6 +79,7 @@ public void testBuildAndCopy() throws Exception {
|
||||
.setProxy(new HttpHost("someproxy"))
|
||||
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM))
|
||||
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.DIGEST))
|
||||
.setContentCompressionEnabled(false)
|
||||
.build();
|
||||
final RequestConfig config = RequestConfig.copy(config0).build();
|
||||
Assert.assertEquals(22, config.getSocketTimeout());
|
||||
@ -94,6 +96,7 @@ public void testBuildAndCopy() throws Exception {
|
||||
Assert.assertEquals(new HttpHost("someproxy"), config.getProxy());
|
||||
Assert.assertEquals(Arrays.asList(AuthSchemes.NTLM), config.getTargetPreferredAuthSchemes());
|
||||
Assert.assertEquals(Arrays.asList(AuthSchemes.DIGEST), config.getProxyPreferredAuthSchemes());
|
||||
Assert.assertEquals(false, config.isContentCompressionEnabled());
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user