要采集一个网站,目标站采用了gzip压缩传输网页,本来应该只要发送一个http头 Accept-Encoding:
identity或者干脆不发送这个头等,就可以使目标站返回没有经过gzip压缩的页面了,不过很不幸,目标站无视客户端的请求,仍然返回gzip数据,造成乱码。
其实php对gzip解压很简单,用内置的gzdecode函数就可以了,不过很可惜我配置了半天也无法支持gzdecode函数,所以只好变通一下:
复制代码 代码如下:
if (!
function_exists('gzdecode'
)) {
function gzdecode (
$data) {
$flags =
ord(
substr(
$data, 3, 1
));
$headerlen = 10
;
$extralen = 0
;
$filenamelen = 0
;
if (
$flags & 4
) {
$extralen =
unpack('v' ,
substr(
$data, 10, 2
));
$extralen =
$extralen[1
];
$headerlen += 2 +
$extralen;
}
if (
$flags & 8)
// Filename
$headerlen =
strpos(
$data,
chr(0),
$headerlen) + 1
;
if (
$flags & 16)
// Comment
$headerlen =
strpos(
$data,
chr(0),
$headerlen) + 1
;
if (
$flags & 2)
// CRC at end of file
$headerlen += 2
;
$unpacked = @
gzinflate(
substr(
$data,
$headerlen));
if (
$unpacked ===
FALSE)
$unpacked =
$data;
return $unpacked;
}
}
调用方法很简单:
复制代码 代码如下:
$f=@
file_get_contents("http://www.jb51.net"
);
echo gzdecode(
$f);
转载于:https://www.cnblogs.com/hgj123/p/4580380.html
相关资源:JAVA上百实例源码以及开源项目