-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAcceptGzipInterceptor.java
More file actions
52 lines (43 loc) · 1.64 KB
/
AcceptGzipInterceptor.java
File metadata and controls
52 lines (43 loc) · 1.64 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import androidx.annotation.NonNull;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.BufferedSink;
import okio.GzipSink;
import okio.Okio;
public class AcceptGzipInterceptor implements Interceptor {
private static final String ACCEPT_ENCODING = "gzip";
private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
private static final String HEADER_CONTENT_ENCODING = "Content-Encoding";
private static final String GZIP = "gzip";
public AcceptGzipInterceptor() {
}
public Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain
.request()
.newBuilder()
.method(chain.request().method(),gzip(chain.request().body()))
.addHeader(HEADER_ACCEPT_ENCODING, ACCEPT_ENCODING)
.addHeader(HEADER_CONTENT_ENCODING, GZIP)
.build();
return chain.proceed(request);
}
private RequestBody gzip(final RequestBody body) {
return new RequestBody() {
@Override public MediaType contentType() {
return body.contentType();
}
@Override public long contentLength() {
return -1; // We don't know the compressed length in advance!
}
@Override public void writeTo(BufferedSink sink) throws IOException {
BufferedSink gzipSink = Okio.buffer(new GzipSink(sink));
body.writeTo(gzipSink);
gzipSink.close();
}
};
}
}