1 问题描述
在用file_get_contents函数采集网站时,有时会遇到明明用浏览器可以看,但就是采不到内容的问题,并且报错【使用 file_get_contents 获取网站信息报错failed to open stream: HTTP request failed!】
2 问题分析
这很有可能是服务器上做了设置,根据 Useragent判断是否为正常的浏览器请求,默认PHP的filegetcontents函数是不发送ua的,如果要采集这样的网站,我们就要 让PHP模拟浏览器发送UA,这样对方的服务器就会以为我们是用浏览器是浏览,而返回正常的内容。 发送UA方法很简单,在使用file_get_contents函数前加上这一句:
user_agent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)"
3 解决例子
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)');
$url='http://www.baidu.com';
echo $flg=@file_get_contents($url);