php中get_meta_tags()、CURL与user-agent用法分析


Posted in PHP onDecember 16, 2014

本文实例分析了php中get_meta_tags()、CURL与user-agent用法。分享给大家供大家参考。具体分析如下:

get_meta_tags()函数用于抓取网页中<meta name="A" content="1"><meta name="B" content="2">形式的标签,并装入一维数组,name为元素下标,content为元素值,上例中的标签可以获得数组:array('A'=>'1', 'b'=>'2'),其他<meta>标签不处理,并且此函数只处理到</head>标签时截止,之后的<meta>也不再继续处理,不过<head>之前的<meta>还是会处理.

user-agent是浏览器在向服务器请求网页时,提交的不可见的头信息的一部分,头信息是一个数组,包含多个信息,比如本地缓存目录,cookies等,其中user-agent是浏览器类型申明,比如IE、Chrome、FF等.

今天在抓取一个网页的<meta>标签的时候,总是得到空值,但是直接查看网页源代码又是正常的,于是怀疑是否服务器设置了根据头信息来判断输出,先尝试使用get_meta_tags()来抓取一个本地的文件,然后这个本地文件将获取的头信息写入文件,结果如下,其中替换成了/,方便查看,代码如下:

array ( 

  'HTTP_HOST' => '192.168.30.205', 

  'PATH' => 'C:/Program Files/Common Files/NetSarang;C:/Program Files/NVIDIA Corporation/PhysX/Common;C:/Program Files/Common Files/Microsoft Shared/Windows Live;C:/Program Files/Intel/iCLS Client/;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Program Files/Intel/Intel(R) Management Engine Components/DAL;C:/Program Files/Intel/Intel(R) Management Engine Components/IPT;C:/Program Files/Intel/OpenCL SDK/2.0/bin/x86;C:/Program Files/Common Files/Thunder Network/KanKan/Codecs;C:/Program Files/QuickTime Alternative/QTSystem;C:/Program Files/Windows Live/Shared;C:/Program Files/QuickTime Alternative/QTSystem/; %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;', 

  'SystemRoot' => 'C:/Windows', 

  'COMSPEC' => 'C:/Windows/system32/cmd.exe', 

  'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 

  'WINDIR' => 'C:/Windows', 

  'SERVER_SIGNATURE' => '', 

  'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.8', 

  'SERVER_NAME' => '192.168.30.205', 

  'SERVER_ADDR' => '192.168.30.205', 

  'SERVER_PORT' => '80', 

  'REMOTE_ADDR' => '192.168.30.205', 

  'DOCUMENT_ROOT' => 'E:/wamp/www', 

  'SERVER_ADMIN' => 'admin@admin.com', 

  'SCRIPT_FILENAME' => 'E:/wamp/www/user-agent.php', 

  'REMOTE_PORT' => '59479', 

  'GATEWAY_INTERFACE' => 'CGI/1.1', 

  'SERVER_PROTOCOL' => 'HTTP/1.0', 

  'REQUEST_METHOD' => 'GET', 

  'QUERY_STRING' => '', 

  'REQUEST_URI' => '/user-agent.php', 

  'SCRIPT_NAME' => '/user-agent.php', 

  'PHP_SELF' => '/user-agent.php', 

  'REQUEST_TIME' => 1400747529, 

)

果然在数组中没有HTTP_USER_AGENT这个元素,apache在向另外一台服务器发送请求的时候是没有UA的,之后查了一下资料,get_meta_tags()函数没有伪造UA的能力,所以只能使用其他办法解决了.

后来使用CURL来获取,就获取到了网页,不过使用上稍微麻烦一点,首先伪造UA,获取之后在使用正则表达式分析<meta>.

伪造办法,代码如下:

// 初始化一个 cURL 

$curl = curl_init(); 

 

// 设置你需要抓取的URL 

curl_setopt($curl, CURLOPT_URL, 'http://localhost/user-agent.php'); 

 

// 设置是否将文件头输出到浏览器,0不输出 

curl_setopt($curl, CURLOPT_HEADER, 0); 

 

// 设置UA,这里是将浏览器的UA转发到服务器,也可以手动指定值 

curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 

 

// 设置cURL 参数,要求结果返回到字符串中还是输出到屏幕上。0输出屏幕并返回操作结果的BOOL值,1返回字符串 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

// 运行cURL,请求网页 

$data = curl_exec($curl); 

 

// 关闭URL请求 

curl_close($curl); 

 

// 处理获得的数据 

var_dump($data);

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
PHP中如何定义和使用常量
Feb 28 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
PHP基本语法总结
Sep 06 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 #PHP
php使用ereg验证文件上传的方法
Dec 16 #PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 #PHP
php中最简单的字符串匹配算法
Dec 16 #PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 #PHP
php输出金字塔的2种实现方法
Dec 16 #PHP
smarty缓存用法分析
Dec 16 #PHP
You might like
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
PHP防盗链代码实例
2014/08/27 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Mac安装python3的方法步骤
2019/08/09 Python
python的命名规则知识点总结
2019/10/04 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
大学毕业生简单自荐信
2013/11/05 职场文书
作风整顿剖析材料
2014/09/30 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
五一晚会主持词
2015/07/01 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers