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.client.protocol;
28
29 import java.io.IOException;
30 import java.util.List;
31
32 import org.apache.http.HttpException;
33 import org.apache.http.HttpRequest;
34 import org.apache.http.HttpRequestInterceptor;
35 import org.apache.http.annotation.Contract;
36 import org.apache.http.annotation.ThreadingBehavior;
37 import org.apache.http.client.config.RequestConfig;
38 import org.apache.http.protocol.HttpContext;
39
40
41
42
43
44
45
46
47
48
49 @Contract(threading = ThreadingBehavior.IMMUTABLE)
50 public class RequestAcceptEncoding implements HttpRequestInterceptor {
51
52 private final String acceptEncoding;
53
54
55
56
57 public RequestAcceptEncoding(final List<String> encodings) {
58 if (encodings != null && !encodings.isEmpty()) {
59 final StringBuilder buf = new StringBuilder();
60 for (int i = 0; i < encodings.size(); i++) {
61 if (i > 0) {
62 buf.append(",");
63 }
64 buf.append(encodings.get(i));
65 }
66 this.acceptEncoding = buf.toString();
67 } else {
68 this.acceptEncoding = "gzip,deflate";
69 }
70 }
71
72 public RequestAcceptEncoding() {
73 this(null);
74 }
75
76 @Override
77 public void process(
78 final HttpRequest request,
79 final HttpContext context) throws HttpException, IOException {
80
81 final HttpClientContext clientContext = HttpClientContext.adapt(context);
82 final RequestConfig requestConfig = clientContext.getRequestConfig();
83
84
85 if (!request.containsHeader("Accept-Encoding") && requestConfig.isContentCompressionEnabled()) {
86 request.addHeader("Accept-Encoding", acceptEncoding);
87 }
88 }
89
90 }