用CURL代替file_get_contents抓取GZIP压缩后的网页

添加时间:17-06-28 所属分类:PHP工具与代码
  http://www.nowamagic.net/librarys/veda/detail/1770

编码问题好办,把抓取到的内容转下编码即可($content=iconv("GBK", "UTF-8//IGNORE", $content);),我们这里讨论的是如何抓取开了Gzip的页面。怎么判断呢?获取的头部当中有Content-Encoding: gzip说明内容是GZIP压缩的。用FireBug看一下就知道页面开了gzip没有。下面是用firebug查看我的博客的头信息,Gzip是开了的。
请求头信息原始头信息
[code]Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Cookie __utma=225240837.787252530.1317310581.1335406161.1335411401.1537; __utmz=225240837.1326850415.887.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=%E4%BB%BB%E4%BD%95%E9%A1%B9%E7%9B%AE%E9%83%BD%E4%B8%8D%E4%BC%9A%E9%82%A3%E4%B9%88%E7%AE%80%E5%8D%95%20site%3Awww.nowamagic.net; PHPSESSID=888mj4425p8s0m7s0frre3ovc7; __utmc=225240837; __utmb=225240837.1.10.1335411401
Host www.nowamagic.net
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0[/code]

下面介绍一些解决方案:

1. 使用自带的zlib库

如果服务器已经装了zlib库,用下面的代码可以轻易解决乱码问题。

[code]$data = file_get_contents("compress.zlib://".$url);[/code]

2. 使用CURL代替file_get_contents

[code]function curl_get($url, $gzip=false){
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
$content = curl_exec($curl);
curl_close($curl);
return $content;
}[/code]
  • 2

前篇:使用.htaccess来防止图片被盗链 后篇:PHP curl函数模拟爬虫(操作cookie)
发表我的评论


推荐文章   四川无腿男子写千首情诗 感动女友父母   天上人间动漫网域名被盗及拿回始末(GoD...   “傻”老太丁瑞云:一句承诺 二十六年无...   她是前世界冠军 嘲笑中让26个残障孩子创...   他是耶鲁高材生,却拿千元月薪 在小山村...
随机文章   PHP输出数组元素的方法   字符编码基本概念   PHP导入和导出Excel文件方法   &#井号+数字 代表 ASCII 字符表   php 过滤特殊字符及sql防注入代码
广告

其他推荐

因为本站所有内容均转载自其它媒体,本意为公众提供免费服务,但并不代表本网赞同其观点,也不能对其真实性验证负责,如稿件版权单位或个人不想在本网发布,请与我联系,本人会立即将其撤除,谢谢.联系方式:atseashawk@163.com QQ:99289555