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中使用sockets:从新闻组中获取文章
Oct 09 PHP
php正则表达匹配中文问题分析小结
Mar 25 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
php实现天干地支计算器示例
Mar 14 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
自制PHP框架之路由与控制器
May 07 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
PHP http请求超时问题解决方案
Nov 13 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
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
如何在python中实现随机选择
2019/11/02 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python多线程thread及模块使用实例
2020/04/28 Python
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
应届毕业生自我评价分享
2013/12/15 职场文书
金融管理应届生求职信
2014/02/20 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
组工干部演讲稿
2014/09/02 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
详解Vue的列表渲染
2021/11/20 Vue.js
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS