Home  >  Article  >  php教程  >  php中get_meta_tags()、CURL与user-agent信息对比

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

WBOY
WBOYOriginal
2016-05-25 16:45:511630browse

下面来简单的介绍在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);


文章网址:

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn