最近在抓取搜狐的时候发现下载下来的页面都是乱码,开始以为是解码出了问题可是查找半天无果,很是郁闷。返回的状态码是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();
}
找到原因,问题很容易就被解决了!
分享到:
相关推荐
总的来说,处理远程GZIP压缩网页的关键在于识别HTTP响应中的`Content-Encoding: gzip`头部信息,并根据此信息调整数据获取方法,无论是使用`file_get_contents`的特殊前缀、`cURL`的选项,还是自定义的解压函数。...
1. **读取GZIP文件**:首先,你需要使用易语言的文件操作命令读取GZIP文件的内容,通常这会涉及`打开文件`、`读取文件`等命令。 2. **解析GZIP头部信息**:GZIP文件格式有特定的头部结构,包含一些元数据,如时间戳...
`Gzip`是一种广泛使用的数据压缩算法,通过在服务器端压缩文件后再传输到浏览器,可以显著减少网络带宽的使用,加快网页加载速度。 首先,我们需要理解`Gzip`的工作原理。`Gzip`基于`DEFLATE`算法,它结合了LZ77...
gzip压缩是一种广泛使用的...对于静态内容以及PHP动态页面的压缩,gzip能够有效降低网页的加载时间,提升用户体验,同时也增强了搜索引擎优化(SEO)的效果,因为支持gzip压缩的搜索引擎可以更快地读取和索引网页内容。
在VB.NET中,GZip压缩和解压缩功能通过`System.IO.Compression`命名空间下的`GZipStream`类来实现。以下是对给定代码片段的详细分析: 1. **压缩文件功能:** - 首先检查源文件是否存在,如果不存在,则抛出`...
总之,理解Gzip压缩和解压缩的过程对于IT从业者至关重要,特别是在网络数据处理、文件存储和传输等领域。通过使用如zlib这样的库,并结合Visual Studio的开发环境,可以方便地实现Gzip文件的压缩和解压缩功能。在...
1. **获取GZIP压缩数据**:前端通常通过Ajax请求从服务器获取到GZIP压缩的资源,或者从本地存储(如localStorage)中读取已经压缩的数据。 2. **解压GZIP数据**:导入`pako.min.js`库,然后调用其提供的`pako....
在本文中,我们将深入探讨Java中的GZIP压缩技术,并结合HTTPWatch监测工具,理解其在实际网络请求中的应用。GZIP是一种广泛使用的数据压缩格式,它可以在网络传输中有效地减小文件大小,从而提高加载速度,减少...
当用户请求网页时,服务器会先对资源进行gzip压缩,然后传输压缩后的版本,浏览器接收到后解压并正常执行。这一过程不仅降低了带宽消耗,还减少了用户的等待时间。 "src" 文件夹通常包含源代码文件,这些文件可能...
此外,如果服务器返回的是GBK编码的GZIP压缩网页,还需要使用`iconv`函数将其转换为UTF-8编码,以避免乱码问题。 除了这种方法,还可以利用PHP的`ob_start`函数以及其相关函数(如`ob_gzhandler`)来处理GZIP压缩的...
在前端,这两个概念通常与HTTP压缩有关,服务器可以自动对发送到浏览器的内容进行Gzip压缩,以减少网络传输的数据量。 Pako库是一个纯JavaScript编写的实现,它提供了与C/C++版本的zlib库类似的接口,支持Gzip和...
例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。在Google网站管理员工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作为Sitemap被提交的。 而这些好处并不仅仅限于...
- 接着,获取到GZIP压缩的数据,可能是通过Ajax请求或者从本地存储中读取。 - 使用`pako.inflate()`方法解压数据,例如:`var decompressedData = pako.inflate(gzippedData, { to: 'string' });` 这将返回解压后...
8. **在HTTP中的应用**:HTTP协议支持gzip压缩,服务器可以通过发送gzipped内容来减少网络传输的数据量,提高网页加载速度。 9. **压缩比比较**:虽然gzip在许多情况下提供了良好的压缩率,但与其他压缩工具(如...
在易语言中实现GZIP压缩,需要理解GZIP的编码格式并调用相应的压缩库。 3. **Brotli压缩**:Brotli是Google开发的一种新型压缩算法,相比GZIP,它在某些场景下能提供更好的压缩比,但支持度相对较低。如果易语言...
在Nginx中,Gzip压缩可以通过配置不同的指令来实现,其中包括开启或关闭Gzip压缩功能、设置压缩级别、缓冲区大小等。 通过Nginx的gzip模块,我们可以轻松地启用Gzip压缩功能。该模块提供了多个配置指令,其中: 1....
通常,这会涉及到读取GZIP文件,调用解压缩函数,将解压缩的数据写入新的文件,以及处理可能出现的错误。 通过阅读和理解源代码,你可以学习到如何处理二进制数据流,如何使用Delphi的内存流类(如TMemoryStream)...
利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。 网页...