java实现html网页的gzip解压

在对网页抓包中发现,返回的很多网页是经过压缩的,比如访问谷歌首页,返回的头文件中包含Content-Encoding gzip

使用gzip可以省下很多网页流量,在网速一定的情况下,可以提高访问效率,我们用java访问时如何可以得到gzip的返回,并且我们如何解析返回的gzip呢?

我们以访问http://www.baidu.com/为例
我们用URL的openStream方法直接访问时并不返回gzip压缩数据,这是因为时候返回gzip需要判断浏览器是否支持gzip压缩,所以我们请求数据的时候在http请求头中添加支持gzip的请求头就可以
添加conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);就告诉服务器你的浏览器支持gzip解压了

URL url = new URL(“http://www.baidu.com/”);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);
conn.connect();

InputStream in = conn.getInputStream();

BufferedReader bin = new BufferedReader(new InputStreamReader(in, “GB2312”));
String s = null;
while((s=bin.readLine())!=null){
System.out.println(s);
}
bin.close();

没有conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);不会出现乱码

加上conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);就是乱码,这事因为服务器对返回内容进行了gzip压缩的缘故,我们只要判断返回头是否包含Content-Encoding gzip,就可以判断是不是压缩过的数据,对待压缩后的数据我们只需进行gzip解压就好了

只需将上面的代码加上
GZIPInputStream gzin = new GZIPInputStream(in);
并将
BufferedReader bin = new BufferedReader(new InputStreamReader(in, “utf-8”));
改为
BufferedReader bin = new BufferedReader(new InputStreamReader(gzin, “utf-8”));

当然是否需要gzip解压,只判断返回数据头是否包含Content-Encoding gzip就可以了

Http gzip 处理相关推荐

  1. tar 和gzip 的区别

    首先要 弄清两个概念:打包和压缩. 打包是指将一大堆文件或目录什么的变成一个总的文件, 压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什么要区分这两个概念呢?其实这源于Linux中的很多压 ...

  2. php gzipstream,c# – 在WebRequest中发送gzip数据?

    我有大量的数据(〜100k),我的C#应用​​程序发送到我的Apache服务器,安装了mod_gzip.我试图使用System.IO.Compression.GZipStream gzip数据. PH ...

  3. 利用python中的gzip模块压缩和解压数据流和文件

    直接给出源码实现, 分为两种情况: 1.网络连接中的数据流的压缩和解压,或是打开的文件读取一部分 2.打开文件压缩或是解压 #!/usr/bin/env python #encoding: utf-8 ...

  4. 启用IIS的Gzip压缩 【转】

    现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传 输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的 ...

  5. 使Apache实现gzip压缩

    众所周知,在HTTP1.1中支持gzip压缩,这样可以缩小页面的容量从而加快页面的显示速度.可以使用常用HTTP抓包工具来检测一下你的站点是否开始了gzip压缩. Apache默认的http.conf ...

  6. tar、gzip、gunzip、bzip2、zip、unzip

    tar [参数] 文件或目录名 •参数:   -c:   建立新的备份档文件.   -f:   对普通文件进行操作.这个参数通常是必选的.   -r:   向备份档文件追加文件.   -x:   从备 ...

  7. Node.js服务器启用Gzip压缩

    Gzip是什么 复制大神们的解释吧: GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩.我们在Linux中经常会用到后缀为.gz的文件,它们就是GZ ...

  8. linux笔记:压缩解压命令gzip,gunzip,tar,zip,unzip,bzip2,bunzip2

    命令名称:gzip 功能:压缩文件 命令所在路径:/bin/gzip 用法:gzip 文件 压缩后文件格式:.gz 其他: 压缩后不保留原文件: 只能压缩文件,不能压缩目录 命令名称:gunzip 功 ...

  9. WordPress 开启 Gzip 为网页加载提速减少响应时间

    2019独角兽企业重金招聘Python工程师标准>>> 大家都晓得,开启Gzip能极大地压缩文本数据的体积.对于使用 WordPress 的博主来说,开启服务器的GZip压缩是一个为 ...

  10. gzip格式分析与识别

    " 介绍gzip格式,识别gzip压缩的数据流量." 在协议分析过程中,经常会发现gzip压缩的数据,例如在HTTP协议中,在HTTP头中会标示,内容编码为gzip.DEFLATE ...

最新文章

  1. linux教程 nfs,[原创]linux视频教程之NFS
  2. android .so文件详解以及兼容性
  3. 软件开发中的一些感想
  4. Spring Boot-@Configuration注解
  5. 每天一道LeetCode-----删除序列中指定元素,将满足要求的元素移动到前面
  6. [react] react中你用过哪些第三方的中间件
  7. MATLAB 求曲线长度
  8. 数据结构--链表--单链表归并排序mergesort
  9. 蒙特卡洛方法_【每日一题56】蒙特卡洛方法 用试验所得的频率估计事件发生概率...
  10. define特殊用法
  11. digester java_commons-digester 升级到 commons-digester3 的坑
  12. Windows XP SP3英文版镜像
  13. (转)sonicstage 完整删除的方法
  14. Skipped ‘XXX.txt‘ -- Node remains in conflict 问题解决
  15. 从空城计到阿尔法狗,博弈论如何渗透我们的生活?
  16. C的指针疑惑:C和指针17(经典抽象数据类型)
  17. Leetcode838: 推多米诺(medium)
  18. win7 任务栏 通知区域
  19. 计算机数据压缩说课,第3章多媒体数据压缩.ppt
  20. 如何迁移操作系统到ssd固态硬盘?

热门文章

  1. 腾讯日常实习面试经历
  2. 编译icedTea-web报错填坑之旅
  3. 计算机大一新生打字速度,打字速度比赛策划书5篇.doc
  4. 一文读懂长非编码RNA(lncRNA)的分类、功能及测序鉴定方法
  5. Java传输文件使用Base64优化传输速率。
  6. 社会网络分析——Social Network Analysis
  7. Windows调试技巧工具
  8. BitBake用户手册-3.语法和操作
  9. Emulex:融合是一切发展的基础
  10. 《SPSS从入门到精通》笔记(1-4章)