JAVA Httpclient 调接口 gzip格式返回值乱码

当调接口返回的值是压缩过的,如果不做处理就会得到一长串乱码。

 

解决方案:

在Httpclient工具类方法中,将返回头进行编码获取,判断是否包含gzip,如果包含则进行解压:

            //此处是将请求体封装成为了StringEntity,若乱码则指定utf-8
            StringEntity se = new StringEntity(jsonstr,"utf-8");
            //  StringEntity se = new StringEntity(jsonstr);
            se.setContentType("text/json");
            se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
            httpPost.setEntity(se);
            HttpResponse response = httpClient.execute(httpPost);
            Header[] headers = response.getHeaders("Content-Encoding");
            boolean isGzip = false;
            for(Header h:headers){
                if(h.getValue().equals("gzip")){
                    //返回头中含有gzip
                    isGzip = true;
                }
            }

            if(isGzip){
                //需要进行gzip解压处理
                result = EntityUtils.toString(new GzipDecompressingEntity(response.getEntity()));
            }else{
                result = EntityUtils.toString(response.getEntity());
            }

 

posted on 2022-11-08 07:35  小目标青年  阅读(540)  评论(0编辑  收藏  举报