mirror of
https://github.com/apache/httpcomponents-client.git
synced 2025-02-17 07:26:47 +00:00
HTTPCLIENT-1464: ability to enable / disable content decompression at request level
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1570142 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3826597f1a
commit
24d5d8b454
@ -51,6 +51,7 @@ public class RequestConfig implements Cloneable {
|
||||
private final int connectionRequestTimeout;
|
||||
private final int connectTimeout;
|
||||
private final int socketTimeout;
|
||||
private final boolean decompressionEnabled;
|
||||
|
||||
RequestConfig(
|
||||
final boolean expectContinueEnabled,
|
||||
@ -67,7 +68,8 @@ public class RequestConfig implements Cloneable {
|
||||
final Collection<String> proxyPreferredAuthSchemes,
|
||||
final int connectionRequestTimeout,
|
||||
final int connectTimeout,
|
||||
final int socketTimeout) {
|
||||
final int socketTimeout,
|
||||
final boolean decompressionEnabled) {
|
||||
super();
|
||||
this.expectContinueEnabled = expectContinueEnabled;
|
||||
this.proxy = proxy;
|
||||
@ -84,6 +86,7 @@ public class RequestConfig implements Cloneable {
|
||||
this.connectionRequestTimeout = connectionRequestTimeout;
|
||||
this.connectTimeout = connectTimeout;
|
||||
this.socketTimeout = socketTimeout;
|
||||
this.decompressionEnabled = decompressionEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -263,6 +266,17 @@ public int getSocketTimeout() {
|
||||
return socketTimeout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether compressed entities should be decompressed automatically.
|
||||
* <p/>
|
||||
* Default: <code>true</code>
|
||||
*
|
||||
* @since 4.4
|
||||
*/
|
||||
public boolean isDecompressionEnabled() {
|
||||
return decompressionEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RequestConfig clone() throws CloneNotSupportedException {
|
||||
return (RequestConfig) super.clone();
|
||||
@ -286,6 +300,7 @@ public String toString() {
|
||||
builder.append(", connectionRequestTimeout=").append(connectionRequestTimeout);
|
||||
builder.append(", connectTimeout=").append(connectTimeout);
|
||||
builder.append(", socketTimeout=").append(socketTimeout);
|
||||
builder.append(", decompressionEnabled=").append(decompressionEnabled);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
@ -310,7 +325,8 @@ public static RequestConfig.Builder copy(final RequestConfig config) {
|
||||
.setProxyPreferredAuthSchemes(config.getProxyPreferredAuthSchemes())
|
||||
.setConnectionRequestTimeout(config.getConnectionRequestTimeout())
|
||||
.setConnectTimeout(config.getConnectTimeout())
|
||||
.setSocketTimeout(config.getSocketTimeout());
|
||||
.setSocketTimeout(config.getSocketTimeout())
|
||||
.setDecompressionEnabled(config.isDecompressionEnabled());
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
@ -330,6 +346,7 @@ public static class Builder {
|
||||
private int connectionRequestTimeout;
|
||||
private int connectTimeout;
|
||||
private int socketTimeout;
|
||||
private boolean decompressionEnabled;
|
||||
|
||||
Builder() {
|
||||
super();
|
||||
@ -341,6 +358,7 @@ public static class Builder {
|
||||
this.connectionRequestTimeout = -1;
|
||||
this.connectTimeout = -1;
|
||||
this.socketTimeout = -1;
|
||||
this.decompressionEnabled = true;
|
||||
}
|
||||
|
||||
public Builder setExpectContinueEnabled(final boolean expectContinueEnabled) {
|
||||
@ -418,6 +436,11 @@ public Builder setSocketTimeout(final int socketTimeout) {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDecompressionEnabled(final boolean decompressionEnabled) {
|
||||
this.decompressionEnabled = decompressionEnabled;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestConfig build() {
|
||||
return new RequestConfig(
|
||||
expectContinueEnabled,
|
||||
@ -434,7 +457,8 @@ public RequestConfig build() {
|
||||
proxyPreferredAuthSchemes,
|
||||
connectionRequestTimeout,
|
||||
connectTimeout,
|
||||
socketTimeout);
|
||||
socketTimeout,
|
||||
decompressionEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -36,6 +36,7 @@
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpResponseInterceptor;
|
||||
import org.apache.http.annotation.Immutable;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.entity.DeflateDecompressingEntity;
|
||||
import org.apache.http.client.entity.GzipDecompressingEntity;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
@ -74,9 +75,11 @@ public void process(
|
||||
final HttpContext context) throws HttpException, IOException {
|
||||
final HttpEntity entity = response.getEntity();
|
||||
|
||||
final HttpClientContext clientContext = HttpClientContext.adapt(context);
|
||||
final RequestConfig requestConfig = clientContext.getRequestConfig();
|
||||
// entity can be null in case of 304 Not Modified, 204 No Content or similar
|
||||
// check for zero length entity.
|
||||
if (entity != null && entity.getContentLength() != 0) {
|
||||
if (requestConfig.isDecompressionEnabled() && entity != null && entity.getContentLength() != 0) {
|
||||
final Header ceheader = entity.getContentEncoding();
|
||||
if (ceheader != null) {
|
||||
final HeaderElement[] codecs = ceheader.getElements();
|
||||
|
@ -31,6 +31,7 @@
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpResponseInterceptor;
|
||||
import org.apache.http.HttpVersion;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.entity.DeflateDecompressingEntity;
|
||||
import org.apache.http.client.entity.GzipDecompressingEntity;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
@ -154,4 +155,25 @@ public void testUnknownContentEncoding() throws Exception {
|
||||
interceptor.process(response, context);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContentEncodingRequestParameter() throws Exception {
|
||||
final HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
|
||||
final StringEntity original = new StringEntity("encoded stuff");
|
||||
original.setContentEncoding("GZip");
|
||||
response.setEntity(original);
|
||||
|
||||
final RequestConfig config = RequestConfig.custom()
|
||||
.setDecompressionEnabled(false)
|
||||
.build();
|
||||
|
||||
final HttpContext context = new BasicHttpContext();
|
||||
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
|
||||
|
||||
final HttpResponseInterceptor interceptor = new ResponseContentEncoding();
|
||||
interceptor.process(response, context);
|
||||
final HttpEntity entity = response.getEntity();
|
||||
Assert.assertNotNull(entity);
|
||||
Assert.assertFalse(entity instanceof GzipDecompressingEntity);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user