public class GzipRequestInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
//更改请求头 设置为gzip,deflate
Request compressedRequest = originalRequest.newBuilder()
.header("Accept-Encoding", "gzip,deflate")
.build();
Response originalResponse = chain.proceed(compressedRequest);
//获取响应体字节流
byte[] compressedData = originalResponse.body().bytes();
//将响应体字节流进行解压
Inflater inflater = new Inflater();
inflater.setInput(compressedData);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(compressedData.length);
byte[] buffer = new byte[1024];
while (!inflater.finished()) {
int count = 0;
try {
count = inflater.inflate(buffer);
} catch (DataFormatException e) {
e.printStackTrace();
}
outputStream.write(buffer, 0, count);
}
outputStream.close();
//解压完成获取数据
byte[] decompressedData = outputStream.toByteArray();
//重新构建response
Response response =originalResponse.newBuilder()
.body(ResponseBody.create(originalResponse.body().contentType(),decompressedData))
.removeHeader("Content-Encoding")
.removeHeader("Content-Length")
.build();
return response;
}
}
okhttp使用deflate并解压
最新推荐文章于 2023-06-26 14:19:44 发布