@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请求头都无所谓,因为服务器根本不支持,怎么样都是返回的未压缩的纯文本,是不会出现问题的。