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


Posted in PHP onDecember 16, 2014

本文实例分析了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 相关文章推荐
基于php冒泡排序算法的深入理解
Jun 09 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
php的curl封装类用法实例
Nov 07 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
Yii支持多域名cors原理的实现
Dec 05 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 #PHP
php使用ereg验证文件上传的方法
Dec 16 #PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 #PHP
php中最简单的字符串匹配算法
Dec 16 #PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 #PHP
php输出金字塔的2种实现方法
Dec 16 #PHP
smarty缓存用法分析
Dec 16 #PHP
You might like
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
Maps Javascript
2007/01/22 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
Django保护敏感信息的方法示例
2019/05/09 Python
用python做游戏的细节详解
2019/06/25 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
解决Python二维数组赋值问题
2019/11/28 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
python爬取代理ip的示例
2020/12/18 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
满月酒答谢词
2014/01/14 职场文书
学年末自我鉴定
2014/01/21 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
婚礼主持词
2014/03/13 职场文书
银行求职自荐信
2014/06/30 职场文书
2014年医务科工作总结
2014/12/18 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL