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

作者:shichen2014 时间:2024-05-02 17:32:52 

本文实例分析了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,get,meta,tags,CURL,user-agent,用法
0
投稿

猜你喜欢

  • TypeScript与JavaScript项目里引入MD5校验和

    2024-05-28 15:40:03
  • JavaScript中诡异的delete操作符

    2024-04-10 16:15:33
  • sql查询点滴记录

    2024-01-14 14:30:19
  • go中new和make的区别小结

    2024-05-09 09:39:48
  • Python面向对象编程(二)

    2022-11-27 23:17:55
  • Python 随机生成中文验证码的实例代码

    2022-12-15 23:17:34
  • splice slice区别

    2024-04-18 10:32:12
  • mysql中TIMESTAMPDIFF案例详解

    2024-01-18 05:56:49
  • Vue配置文件vue.config.js配置前端代理方式

    2023-07-02 16:39:06
  • InnoDb 体系架构和特性详解 (Innodb存储引擎读书笔记总结)

    2024-01-21 14:21:03
  • php数组中删除元素之重新索引的方法

    2024-05-22 10:07:18
  • ROS  TF坐标变换基本概念及使用案例

    2022-02-01 10:25:35
  • JavaScript 如何在线解压 ZIP 文件

    2024-04-22 22:14:58
  • python中count函数知识点浅析

    2023-05-21 18:41:30
  • Web标准在中国

    2008-11-26 11:27:00
  • JavaScript常用8种数组去重代码实例

    2024-04-18 10:58:09
  • 使用Javascript简单计算器

    2024-04-29 13:37:15
  • SQL2000个人版 应用程序正常初始化失败0乘以C0000135失败

    2024-01-27 05:09:39
  • python实现通过代理服务器访问远程url的方法

    2023-03-14 00:47:38
  • Python使用plt.boxplot() 参数绘制箱线图

    2022-06-03 16:30:09
  • asp之家 网络编程 m.aspxhome.com