首页 >php教程 >php手册 >php中get_meta_tags()、CURL与user-agent信息对比

php中get_meta_tags()、CURL与user-agent信息对比

WBOY
WBOY原创
2016-05-25 16:45:511664浏览

下面来简单的介绍在php中get_meta_tags()、CURL与user-agent信息对比情况,如果你对于这篇文章有兴趣可进入参考学习。

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

之前的还是会处理。

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

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

<?php
array(
    &#39;HTTP_HOST&#39; => &#39;192.168.30.205&#39;,
    &#39;PATH&#39; => &#39;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;&#39;,
    &#39;SystemRoot&#39; => &#39;C:/Windows&#39;,
    &#39;COMSPEC&#39; => &#39;C:/Windows/system32/cmd.exe&#39;,
    &#39;PATHEXT&#39; => &#39;.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC&#39;,
    &#39;WINDIR&#39; => &#39;C:/Windows&#39;,
    &#39;SERVER_SIGNATURE&#39; => &#39;&#39;,
    &#39;SERVER_SOFTWARE&#39; => &#39;Apache/2.2.11 (Win32) PHP/5.2.8&#39;,
    &#39;SERVER_NAME&#39; => &#39;192.168.30.205&#39;,
    &#39;SERVER_ADDR&#39; => &#39;192.168.30.205&#39;,
    &#39;SERVER_PORT&#39; => &#39;80&#39;,
    &#39;REMOTE_ADDR&#39; => &#39;192.168.30.205&#39;,
    &#39;DOCUMENT_ROOT&#39; => &#39;E:/wamp/www&#39;,
    &#39;SERVER_ADMIN&#39; => &#39;admin@admin.com&#39;,
    &#39;SCRIPT_FILENAME&#39; => &#39;E:/wamp/www/user-agent.php&#39;,
    &#39;REMOTE_PORT&#39; => &#39;59479&#39;,
    &#39;GATEWAY_INTERFACE&#39; => &#39;CGI/1.1&#39;,
    &#39;SERVER_PROTOCOL&#39; => &#39;HTTP/1.0&#39;,
    &#39;REQUEST_METHOD&#39; => &#39;GET&#39;,
    &#39;QUERY_STRING&#39; => &#39;&#39;,
    &#39;REQUEST_URI&#39; => &#39;/user-agent.php&#39;,
    &#39;SCRIPT_NAME&#39; => &#39;/user-agent.php&#39;,
    &#39;PHP_SELF&#39; => &#39;/user-agent.php&#39;,
    &#39;REQUEST_TIME&#39; => 1400747529,
)
?>

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

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

伪造办法:

<?php
// 初始化一个 cURL
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, &#39;http://localhost/user-agent.php&#39;);
// 设置是否将文件头输出到浏览器,0不输出
curl_setopt($curl, CURLOPT_HEADER, 0);
// 设置UA,这里是将浏览器的UA转发到服务器,也可以手动指定值
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER[&#39;HTTP_USER_AGENT&#39;]);
// 设置cURL 参数,要求结果返回到字符串中还是输出到屏幕上。0输出屏幕并返回操作结果的BOOL值,1返回字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 处理获得的数据
var_dump($data);


文章网址:

随意转载^^但请附上教程地址。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn