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 相关文章推荐
十天学会php之第十天
Oct 09 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP实现图片压缩
Sep 09 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
PHP 出现 http500 错误的解决方法
Mar 09 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 Google的translate API代码
2008/12/10 PHP
PHP 编程安全性小结
2010/01/08 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
JS实现图片预加载无需等待
2012/12/21 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
python版本单链表实现代码
2018/09/28 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
12月红领巾广播稿
2014/02/13 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
给医院的感谢信
2015/01/21 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL