`
wangwei3
  • 浏览: 118111 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何读取gzip压缩网页

阅读更多
最近在抓取搜狐的时候发现下载下来的页面都是乱码,开始以为是解码出了问题可是查找半天无果,很是郁闷。返回的状态码是200,怎么都是乱码呢?难道是页面做了加密?
其实这是搜狐为了加快网页加载速度对页面做了压缩。哎,我out了~~~~

下面来解决这个问题吧~~~
1.如何判断页面是否是压缩的
URLConnection hc = null;
hc.getHeaderField("Content-Encoding") 如果得到的是 gzip则说明页面做了压缩
2.对页面压缩/解压的方法


         /** 
	 * @param source
	 *            源文件
	 * @param target
	 *            目标文件
	 */
	public static void unGZipFile(File source, String target) throws Exception { // 解压文件
		FileInputStream fin = new FileInputStream(source); // 得以文件输入流
		GZIPInputStream gzin = new GZIPInputStream(fin); // 得到压缩输入流
		FileOutputStream fout = new FileOutputStream(target); // 得到文件输出流
		byte[] buf = new byte[1024]; // 缓冲区大小
		int num;
		while ((num = gzin.read(buf, 0, buf.length)) != -1)
		{ // 如果文件未读完
			fout.write(buf, 0, num); // 写入缓冲数据到输出流
		}
		gzin.close(); // 关闭压缩输入流
		fout.close(); // 关闭文件输出流
		fin.close(); // 关闭文件输入流
	}

	/**
	 * gzip压缩文件
	 * 
	 * @param source
	 *            源文件
	 * @param target
	 *            压缩后文件.mms格式
	 * @throws Exception
	 */
	public static void gZipFile(File source, File target) throws Exception {
		FileInputStream fin = new FileInputStream(source);
		BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(
				new FileOutputStream(target)));
		int c = -1;
		while ((c = fin.read()) != -1)
		{
			out.write(c);
		}
		fin.close();
		out.close();
	}


找到原因,问题很容易就被解决了!
0
1
分享到:
评论
1 楼 国仔饼 2011-04-07  
  

相关推荐

    php读取远程gzip压缩网页的方法

    主要介绍了php读取远程gzip压缩网页的方法,当站点使用gzip压缩时,使用常规的远程获取方法会得到乱码结果,使用本文方法即可解决这个问题,需要的朋友可以参考下

    使用php判断网页是否gzip压缩

    因为我有过相关经验马上发现是网站开启了gzip而file_get_contents 获得的是压缩过的页面,而不是解压过的页面(不知道是不是要file_get_conttents 请求网页时带上相应的参数,直接获得没有被gzip压缩过的网页?...

    关于HTTP传输中gzip压缩的秘密探索分析

    例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。在Google网站管理员工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作为Sitemap被提交的。 而这些好处并不仅仅限于...

    apache启用gzip压缩的实现方法

    利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。 网页...

    IIS开启Gzip失败的原因之一:冲突 附解决方法

    但有一台服务器就没有成功,找过原因,未找到,今天突然想到一个方面,赶紧的动手尝试,果然原因就在于此。...例如Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。这些好处并不仅仅限于静态内容

    安卓java读取网页源码-AndroidStudy:Android进阶内容整理

    安卓java读取网页源码 AndroidStudy Android进阶内容整理 blog地址链接: 书籍: 1.Android群英传 2.Android艺术开发与探索 3.Android设计模式 第三方框架 详细使用步骤加源码解析:1.会使用 2.懂原理 3.框架源码...

    PHP中使用file_get_contents抓取网页中文乱码问题解决方法

    根据网上有朋友介绍说原因可能是服务器开了GZIP压缩,下面是用firebug查看我的网站的头信息,Gzip是开了的,请求头信息原始头信息,代码如下: 复制代码 代码如下:Accept text/html,application/xhtml+xml,ap

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    精易模块[永久免费] V3.12

    ' 增加 - 网页_GZIP压缩 () '感谢小磊提供 ' 增加 - 网页_GZIP解压 () '感谢小磊提供 ' 增加 - 网页_JS清晰化 () '感谢小磊提供 ' 增加 - 网页_访问_对象 () '感谢小磊提供 ' 增加 - 系统_设置IE代理地址 () 增加一...

    C#开发经验技巧宝典

    0695 如何使用GZip压缩文件 427 0696 如何使用GZip解压文件 428 0697 如何使用WinRAR压缩文件 429 0698 如何使用WinRAR解压文件 429 16.6 其他 430 0699 设置文件的访问模式 430 0700 如何在C#应用程序...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...

Global site tag (gtag.js) - Google Analytics