最近在抓取搜狐的时候发现下载下来的页面都是乱码,开始以为是解码出了问题可是查找半天无果,很是郁闷。返回的状态码是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();
}
找到原因,问题很容易就被解决了!
分享到:
相关推荐
主要介绍了php读取远程gzip压缩网页的方法,当站点使用gzip压缩时,使用常规的远程获取方法会得到乱码结果,使用本文方法即可解决这个问题,需要的朋友可以参考下
因为我有过相关经验马上发现是网站开启了gzip而file_get_contents 获得的是压缩过的页面,而不是解压过的页面(不知道是不是要file_get_conttents 请求网页时带上相应的参数,直接获得没有被gzip压缩过的网页?...
例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。在Google网站管理员工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作为Sitemap被提交的。 而这些好处并不仅仅限于...
利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。 网页...
但有一台服务器就没有成功,找过原因,未找到,今天突然想到一个方面,赶紧的动手尝试,果然原因就在于此。...例如Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。这些好处并不仅仅限于静态内容
安卓java读取网页源码 AndroidStudy Android进阶内容整理 blog地址链接: 书籍: 1.Android群英传 2.Android艺术开发与探索 3.Android设计模式 第三方框架 详细使用步骤加源码解析:1.会使用 2.懂原理 3.框架源码...
根据网上有朋友介绍说原因可能是服务器开了GZIP压缩,下面是用firebug查看我的网站的头信息,Gzip是开了的,请求头信息原始头信息,代码如下: 复制代码 代码如下:Accept text/html,application/xhtml+xml,ap
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
' 增加 - 网页_GZIP压缩 () '感谢小磊提供 ' 增加 - 网页_GZIP解压 () '感谢小磊提供 ' 增加 - 网页_JS清晰化 () '感谢小磊提供 ' 增加 - 网页_访问_对象 () '感谢小磊提供 ' 增加 - 系统_设置IE代理地址 () 增加一...
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数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...