1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.impl.client;
28
29 import java.io.IOException;
30 import java.net.URI;
31
32 import org.apache.http.HttpEntity;
33 import org.apache.http.HttpEntityEnclosingRequest;
34 import org.apache.http.HttpException;
35 import org.apache.http.HttpHost;
36 import org.apache.http.HttpRequest;
37 import org.apache.http.HttpRequestInterceptor;
38 import org.apache.http.HttpResponse;
39 import org.apache.http.HttpResponseInterceptor;
40 import org.apache.http.client.ClientProtocolException;
41 import org.apache.http.client.HttpClient;
42 import org.apache.http.client.ResponseHandler;
43 import org.apache.http.client.methods.HttpUriRequest;
44 import org.apache.http.client.protocol.RequestAcceptEncoding;
45 import org.apache.http.client.protocol.ResponseContentEncoding;
46 import org.apache.http.client.utils.URIUtils;
47 import org.apache.http.conn.ClientConnectionManager;
48 import org.apache.http.params.HttpParams;
49 import org.apache.http.protocol.BasicHttpContext;
50 import org.apache.http.protocol.HttpContext;
51 import org.apache.http.util.EntityUtils;
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 @Deprecated
78 public class DecompressingHttpClient implements HttpClient {
79
80 private final HttpClient backend;
81 private final HttpRequestInterceptor acceptEncodingInterceptor;
82 private final HttpResponseInterceptor contentEncodingInterceptor;
83
84
85
86
87
88 public DecompressingHttpClient() {
89 this(new DefaultHttpClient());
90 }
91
92
93
94
95
96
97
98 public DecompressingHttpClient(final HttpClient backend) {
99 this(backend, new RequestAcceptEncoding(), new ResponseContentEncoding());
100 }
101
102 DecompressingHttpClient(final HttpClient backend,
103 final HttpRequestInterceptor requestInterceptor,
104 final HttpResponseInterceptor responseInterceptor) {
105 this.backend = backend;
106 this.acceptEncodingInterceptor = requestInterceptor;
107 this.contentEncodingInterceptor = responseInterceptor;
108 }
109
110 public HttpParams getParams() {
111 return backend.getParams();
112 }
113
114 public ClientConnectionManager getConnectionManager() {
115 return backend.getConnectionManager();
116 }
117
118 public HttpResponse execute(final HttpUriRequest request) throws IOException,
119 ClientProtocolException {
120 return execute(getHttpHost(request), request, (HttpContext)null);
121 }
122
123
124
125
126
127
128 public HttpClient getHttpClient() {
129 return this.backend;
130 }
131
132 HttpHost getHttpHost(final HttpUriRequest request) {
133 final URI uri = request.getURI();
134 return URIUtils.extractHost(uri);
135 }
136
137 public HttpResponse execute(final HttpUriRequest request, final HttpContext context)
138 throws IOException, ClientProtocolException {
139 return execute(getHttpHost(request), request, context);
140 }
141
142 public HttpResponse execute(final HttpHost target, final HttpRequest request)
143 throws IOException, ClientProtocolException {
144 return execute(target, request, (HttpContext)null);
145 }
146
147 public HttpResponse execute(final HttpHost target, final HttpRequest request,
148 HttpContext context) throws IOException, ClientProtocolException {
149 try {
150 if (context == null) {
151 context = new BasicHttpContext();
152 }
153 HttpRequest wrapped;
154 if (request instanceof HttpEntityEnclosingRequest) {
155 wrapped = new EntityEnclosingRequestWrapper((HttpEntityEnclosingRequest) request);
156 } else {
157 wrapped = new RequestWrapper(request);
158 }
159 acceptEncodingInterceptor.process(wrapped, context);
160 final HttpResponse response = backend.execute(target, wrapped, context);
161 try {
162 contentEncodingInterceptor.process(response, context);
163 if (Boolean.TRUE.equals(context.getAttribute(ResponseContentEncoding.UNCOMPRESSED))) {
164 response.removeHeaders("Content-Length");
165 response.removeHeaders("Content-Encoding");
166 response.removeHeaders("Content-MD5");
167 }
168 return response;
169 } catch (final HttpException ex) {
170 EntityUtils.consume(response.getEntity());
171 throw ex;
172 } catch (final IOException ex) {
173 EntityUtils.consume(response.getEntity());
174 throw ex;
175 } catch (final RuntimeException ex) {
176 EntityUtils.consume(response.getEntity());
177 throw ex;
178 }
179 } catch (final HttpException e) {
180 throw new ClientProtocolException(e);
181 }
182 }
183
184 public <T> T execute(final HttpUriRequest request,
185 final ResponseHandler<? extends T> responseHandler) throws IOException,
186 ClientProtocolException {
187 return execute(getHttpHost(request), request, responseHandler);
188 }
189
190 public <T> T execute(final HttpUriRequest request,
191 final ResponseHandler<? extends T> responseHandler, final HttpContext context)
192 throws IOException, ClientProtocolException {
193 return execute(getHttpHost(request), request, responseHandler, context);
194 }
195
196 public <T> T execute(final HttpHost target, final HttpRequest request,
197 final ResponseHandler<? extends T> responseHandler) throws IOException,
198 ClientProtocolException {
199 return execute(target, request, responseHandler, null);
200 }
201
202 public <T> T execute(final HttpHost target, final HttpRequest request,
203 final ResponseHandler<? extends T> responseHandler, final HttpContext context)
204 throws IOException, ClientProtocolException {
205 final HttpResponse response = execute(target, request, context);
206 try {
207 return responseHandler.handleResponse(response);
208 } finally {
209 final HttpEntity entity = response.getEntity();
210 if (entity != null) {
211 EntityUtils.consume(entity);
212 }
213 }
214 }
215
216 }