用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

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

时间:2015-01-23  来源:西部数据  作者:西部数据

下面来简单的介绍在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()来抓取一个本地的文件,然后这个本地文件将获取的头信息写入文件,结果如下,其中替换成了/,方便查看,代码如下:

  1. array ( 
  2.   'HTTP_HOST' => '192.168.30.205'
  3.   '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;'
  4.   'SystemRoot' => 'C:/Windows'
  5.   'COMSPEC' => 'C:/Windows/system32/cmd.exe'
  6.   'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC'
  7.   'WINDIR' => 'C:/Windows'
  8.   'SERVER_SIGNATURE' => ''
  9.   'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.8'
  10.   'SERVER_NAME' => '192.168.30.205'
  11.   'SERVER_ADDR' => '192.168.30.205'
  12.   'SERVER_PORT' => '80'
  13.   'REMOTE_ADDR' => '192.168.30.205'
  14.   'DOCUMENT_ROOT' => 'E:/wamp/www'
  15.   'SERVER_ADMIN' => 'admin@admin.com'
  16.   'SCRIPT_FILENAME' => 'E:/wamp/www/user-agent.php'
  17.   'REMOTE_PORT' => '59479'
  18.   'GATEWAY_INTERFACE' => 'CGI/1.1'
  19.   'SERVER_PROTOCOL' => 'HTTP/1.0'
  20.   'REQUEST_METHOD' => 'GET'
  21.   'QUERY_STRING' => ''
  22.   'REQUEST_URI' => '/user-agent.php'
  23.   'SCRIPT_NAME' => '/user-agent.php'
  24.   'PHP_SELF' => '/user-agent.php'
  25.   'REQUEST_TIME' => 1400747529, 

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

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

伪造办法,代码如下:

  1. // 初始化一个 cURL 
  2. $curl = curl_init(); 
  3.  
  4. // 设置你需要抓取的URL 
  5. curl_setopt($curl, CURLOPT_URL, 'http://localhost/user-agent.php'); 
  6.  
  7. // 设置是否将文件头输出到浏览器,0不输出 
  8. curl_setopt($curl, CURLOPT_HEADER, 0); 
  9.  
  10. // 设置UA,这里是将浏览器的UA转发到服务器,也可以手动指定值 
  11. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
  12.  
  13. // 设置cURL 参数,要求结果返回到字符串中还是输出到屏幕上。0输出屏幕并返回操作结果的BOOL值,1返回字符串 
  14. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  15. //开源代码phpfensi.com 
  16. // 运行cURL,请求网页 
  17. $data = curl_exec($curl); 
  18.  
  19. // 关闭URL请求 
  20. curl_close($curl); 
  21.  
  22. // 处理获得的数据 
  23. var_dump($data);
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门