解析file_get_contents模仿浏览器头(user_agent)获取数据


Posted in PHP onJune 27, 2013

什么是user agent
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
网站可以通过判断不同UA来呈现不同的网站,例如手机访问和PC访问显示不同的页面。
PHP在用file_get_contents函数采集网站时,有时会明明用浏览器可以看,但就是采不到任何内容。
这很有可能是服务器上做了设置,根据 User_agent判断是否为正常的浏览器请求,因为默认PHP的file_get_contents函数是不发送ua的。
如果要采集这样的网站,我们就必须要让PHP模拟浏览器发送UA,欺骗网站返回正常内容。

实现如下:
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)');
这是模拟IE8环境下的UA,当然你也可以换成其他的。比如中火狐
也可以这样读取:

$opts = array(
'http'=>array(
    'method'=>"GET",
    'header'=>"Host: zh.wikipedia.org\r\n" . 
              "Accept-language: zh-cn\r\n" . 
              "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)" .
              "Accept: *//*"
)
);
PHP 相关文章推荐
php操作JSON格式数据的实现代码
Dec 24 PHP
PHP防CC攻击实现代码
Dec 29 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 PHP
一次因composer错误使用引发的问题与解决
Mar 06 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 #PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 #PHP
领悟php接口中interface存在的意义
Jun 27 #PHP
CURL状态码列表(详细)
Jun 27 #PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 #PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 #PHP
深入解析phpCB批量转换的代码示例
Jun 27 #PHP
You might like
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
js实现一键复制功能
2017/03/16 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
治庸问责心得体会
2014/09/12 职场文书
学生检讨书范文
2015/01/27 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
Python如何使用循环结构和分支结构
2022/04/13 Python