相关文章推荐
忐忑的登山鞋  ·  MapStruct Dozer ...·  1 月前    · 
呐喊的竹笋  ·  Environment.GetExterna ...·  3 月前    · 
俊秀的凳子  ·  Model Binding in ...·  1 年前    · 
@Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {

下面是设置请求头的代码如下

URL url = new URL(request.getUrl().toString()); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Accept-Encoding","gzip,deflate"); connection.getOutputStream().write(mPostBytes); return new WebResourceResponse("text/html",connection.getHeaderField("encoding"), connection.getInputStream());

本身HttpURLConnection是默认支持自动Gzip压缩与配套解压缩处理的,但是如果手动设置了下面这句话,自动的处理就不灵了,也就是说,请求头手动加了这个,那么返回的数据也要手动解压缩。要么就不要手动加这个。

connection.setRequestProperty(Constants.REQUEST_PROPERTY_ACCEPT_ENCODING,"gzip,deflate");

手动加解压缩的方法也很简单,如下图:

//改之前: return new WebResourceResponse("text/html",connection.getHeaderField("encoding"), connection.getInputStream()); //改之后: return new WebResourceResponse("text/html",connection.getHeaderField("encoding"), new GZIPInputStream(connection.getInputStream()));

利用的是【GZIPInputStream】这个类。

另外,如果服务器本身根本不支持Gzip的情况下,即使你怎么手动配置gzip请求头都无所谓,因为服务器根本不支持,怎么样都是返回的未压缩的纯文本,是不会出现问题的。