Content-Encoding为gzip的数据解压
项目中调用第三方接口,返回的数据乱码,发现是因为Content-Encoding为gzip的原因,记录一下解压方法
URL url = new URL(path);
// 打开和url之间的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// PrintWriter out = null;
// 请求方式
conn.setRequestMethod("POST");
conn.setConnectTimeout(20000);
conn.setReadTimeout(20000);
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
InputStream is = conn.getInputStream();
String contentType = conn.getContentType();
String contentEncoding = conn.getContentEncoding();
String result = "";
if ("gzip".equalsIgnoreCase(contentEncoding)) {
byte[] b = IOUtils.toByteArray(is);
ByteArrayInputStream bais = new ByteArrayInputStream(b);
GZIPInputStream gzis = new GZIPInputStream(bais);
InputStreamReader reader = new InputStreamReader(gzis);
BufferedReader in = new BufferedReader(reader);
String str;
while ((readed = in.readLine()) != null) {
result = str;
System.out.println("str: " + str);
}
}else{
// 构造一个字符流缓存
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String str;
while ((str = br.readLine()) != null) {
result = str;
System.out.println("str: " + str);
}
}
// 关闭流
is.close();
// 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
// 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
conn.disconnect();
return result;
更多推荐
Content-Encoding为gzip的数据解压
发布评论