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

2015-01-24信息快讯网

这篇文章主要介绍了php中get_meta_tags()、CURL与user-agent用法,以实例形式较为详细的分析了get_meta_tags()、CURL与user-agent使用时的注意事项与用法,具有一定的参考借鉴价值,需要的朋友可以参考下

本文实例分析了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' => '[email protected]', 
  '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使用正则表达式获取图片url的方法
php使用CURL伪造IP和来源实例详解
ucenter通信原理分析
php计划任务之ignore_user_abort函数实现方法
CI框架中site_url()和base_url()的区别
WampServer下安装多个版本的PHP、mysql、apache图文教程
PHP中使用CURL获取页面title例子
PHP和Shell实现检查SAMBA与NFS Server是否存在
windows中为php安装mongodb与memcache
phpQuery让php处理html代码像jQuery一样方便
php下Memcached入门实例解析
Thinkphp中的curd应用实用要点
php读取mssql的ntext字段返回值为空的解决方法
php从memcache读取数据再批量写入mysql的方法
PHP使用memcache缓存技术提高响应速度的方法
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
CentOS6.5 编译安装lnmp环境
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
php批量添加数据与批量更新数据的实现方法
PHP使用array_multisort对多个数组或多维数组进行排序
php使用ereg验证文件上传的方法
PHP使用pcntl_fork实现多进程下载图片的方法
PHP使用xmllint命令处理xml与html的方法
PHP中Memcache操作类及用法实例
jQuery Mobile + PHP实现文件上传
php通过session防url攻击方法
PHP使用header()输出图片缓存实例
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
PHP内存缓存Memcached类实例
PHP模块memcached使用指南
Codeigniter框架实现获取分页数据和总条数的方法
yii的CURD操作实例详解
Yii的CDbCriteria查询条件用法实例
Yii框架中memcache用法实例
Yii使用ajax验证显示错误messagebox的解决方法
Yii框架获取当前controlle和action对应id的方法
php提取字符串中网站url地址的方法
php中print(),print_r(),echo()的区别详解
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
thinkphp四种url访问方式详解
©2014-2024 dbsqp.com