Created
November 16, 2022 07:34
-
-
Save parthdesai1208/9ed9cf708edae44b1b77fde5f02d5e8d to your computer and use it in GitHub Desktop.
Retrofit interceptors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Gzip interceptors = for data compression | |
public class GzipRequestInterceptor implements Interceptor { | |
@Override | |
public Response intercept(Chain chain) throws IOException { | |
Request originalRequest = chain.request(); | |
if (originalRequest.body() == null || originalRequest.header("Content-Encoding") != null) { | |
return chain.proceed(originalRequest); | |
} | |
Request compressedRequest = originalRequest.newBuilder() | |
.header("Content-Encoding", "gzip") | |
.method(originalRequest.method(), forceContentLength(gzip(originalRequest.body()))) | |
.build(); | |
return chain.proceed(compressedRequest); | |
} | |
private RequestBody forceContentLength(final RequestBody requestBody) throws IOException { | |
final Buffer buffer = new Buffer(); | |
requestBody.writeTo(buffer); | |
return new RequestBody() { | |
@Override | |
public MediaType contentType() { | |
return requestBody.contentType(); | |
} | |
@Override | |
public long contentLength() { | |
return buffer.size(); | |
} | |
@Override | |
public void writeTo(BufferedSink sink) throws IOException { | |
sink.write(buffer.snapshot()); | |
} | |
}; | |
} | |
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(); | |
} | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment