解析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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
关于crontab的使用详解
Jun 24 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
php实现微信发红包
Dec 05 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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
深入PHP许愿墙模块功能分析
2013/06/25 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
js加解密 脚本解密
2008/02/22 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
python中函数传参详解
2016/07/03 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
django2笔记之路由path语法的实现
2019/07/17 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
浅析python中的del用法
2020/09/02 Python
python实现扫雷游戏的示例
2020/10/20 Python
英文简历中的自荐信范文
2013/12/14 职场文书
会议室标语
2014/06/21 职场文书
中班上学期个人总结
2015/02/12 职场文书
捐款通知怎么写
2015/04/24 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python